[英]Python class method inheritance
我有两个类,一个继承自另一个。 我需要WOFPlayer
实例采用 1 个必需参数 - name
,2 个可选参数, WOFComputerPlayer
实例需要采用 2 个必需参数 - name
和difficulty
以及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.