繁体   English   中英

Python类方法继承

[英]Python class method inheritance

我有两个类,一个继承自另一个。 我需要WOFPlayer实例采用 1 个必需参数 - name ,2 个可选参数, WOFComputerPlayer实例需要采用 2 个必需参数 - namedifficulty以及WOFPlayer中的 2 个可选WOFPlayer 我怎么做?

这是我尝试过的

class WOFPlayer:
    def __init__(self, name, prizeMoney = 0, prizes = []):
        self.name = name
        self.prizeMoney = prizeMoney
        self.prizes = prizes[:]

class WOFComputerPlayer(WOFPlayer):
    def __init__(self, difficulty):
        WOFPlayer.__init__(self, name, prizeMoney = 0, prizes = [])
        self.difficulty = difficulty

提前致谢

我需要 WOFPlayer 的实例来获取 1 个必需参数 - 名称,2 个可选参数

我强烈建议您不要使用可变对象(本例中的列表)作为默认参数。 是为什么。

和 WOFComputerPlayer 实例采用 2 个必需参数 - 名称和难度以及 WOFPlayer 中的 2 个可选参数

您需要将值从 WOFComputerPlayer 传递到其基类。 也就是说,将name传递给WOFComputerPlayer

class WOFComputerPlayer(WOFPlayer):
    def __init__(self, name, difficulty, prize_money=0, prizes=None):
        WOFPlayer.__init__(self, name, prizeMoney=prize_money, prizes=prizes)
        self.difficulty = difficulty

你比你想象的更近。


class WOFPlayer:
    def __init__(self, name, prizeMoney=0, prizes=None):
        
        self.name = name
        self.prizeMoney = prizeMoney

        if prizes is None:
            prizes = []
        self.prizes = prizes[:]

class WOFComputerPlayer(WOFPlayer):
    def __init__(self, name, difficulty, prizeMoney=0, prizes=None):
        super().__init__(name, prizeMoney, prizes)
        self.difficulty = difficulty

请注意,我将传递可变值替换为默认参数。 []作为默认参数将在该值发生变化时发生变化,这可能是错误的秘诀。 但其余的代码是你的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM