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
后面的括号之间。否则,我看不出真正的问题是什么。