Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类方法继承_Python_Class_Inheritance - Fatal编程技术网

Python类方法继承

Python类方法继承,python,class,inheritance,Python,Class,Inheritance,我有两个类,一个继承自另一个。我需要WOFPlayer的实例来获取1个必需的参数-name,2个可选的和WOFComputerPlayer的实例来获取2个必需的参数-name和难度和2个可选的,就像WOFPlayer一样。我该怎么做 这是我试过的 class WOFPlayer: def __init__(self, name, prizeMoney = 0, prizes = []): self.name = name self.prizeMoney =

我有两个类,一个继承自另一个。我需要
WOFPlayer
的实例来获取1个必需的参数-
name
,2个可选的和
WOFComputerPlayer
的实例来获取2个必需的参数-
name
难度
和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实例,以获取两个必需参数-名称和难度,以及WOFPlayer中的两个可选参数

您需要将值从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
我需要WOFPlayer的实例获取1个必需的参数-名称,2个可选参数

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

和WOFComputerPlayer实例,以获取两个必需参数-名称和难度,以及WOFPlayer中的两个可选参数

您需要将值从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

你比你想象的要近


WOFPlayer类:
定义初始化(self,name,prizeMoney=0,奖品=None):
self.name=名称
self.prizeMoney=prizeMoney
如果没有奖品:
奖品=[]
self.奖品=奖品[:]
WOFComputerPlayer类(WOFPlayer):
定义初始(自我、姓名、难度、优先级=0,奖品=None):
super().\uuuu init\uuuuu(姓名、奖金、奖品)
困难

注意,我替换了将可变值作为默认参数传递<代码>[]作为默认参数,该值在任何时候发生变化时都会发生变化,这可能导致错误。但是剩下的代码是你的。

你比你想象的更接近


WOFPlayer类:
定义初始化(self,name,prizeMoney=0,奖品=None):
self.name=名称
self.prizeMoney=prizeMoney
如果没有奖品:
奖品=[]
self.奖品=奖品[:]
WOFComputerPlayer类(WOFPlayer):
定义初始(自我、姓名、难度、优先级=0,奖品=None):
super().\uuuu init\uuuuu(姓名、奖金、奖品)
困难

注意,我替换了将可变值作为默认参数传递<代码>[]作为默认参数,该值在任何时候发生变化时都会发生变化,这可能导致错误。但是其余的代码是您的。

对于
WOFPlayer
中您不希望在
WOFComputerPlayer
中继承的实例,您可以将它们设置为
私有
实例。为此,只需在实例名称前加两条下划线即可。例如,
\uuuuu name
。如果
WOFComputerPlayer.\uuuu init\uuuu
应该同时接受
name
难度
作为参数,那么第一件事是它们都应该出现在
def\uu init\uu
后面的括号之间。否则,我看不出实际的问题是什么。对于
WOFPlayer
中您不希望在
WOFComputerPlayer
中继承的实例,您可以将它们设置为
private
实例。为此,只需在实例名称前加两条下划线即可。例如,
\uuuuu name
。如果
WOFComputerPlayer.\uuuu init\uuuu
应该同时接受
name
难度
作为参数,那么第一件事是它们都应该出现在
def\uu init\uu
后面的括号之间。否则,我看不出真正的问题是什么。