我有一个家长班:
class BaseClass:
def __init__(self, foo, bar=10):
self.foo = foo
以及从中继承的类:
class InheritedClass(BaseClass):
def __init__(self, x, y, bar=10):
super().__init__(True, bar=bar)
self.x = x
self.y = y
目前,bar
在父类和继承类中都有一个默认值,我必须跟踪它以确保它们都是同步的。如何将InheritedClass
构造函数改为使用BaseClass
中定义的bar
的默认值
我试过:
class InheritedClass(BaseClass):
def __init__(self, x, y, bar=None):
if bar is None:
super().__init__(True)
else:
super().__init__(True,bar)
self.x = x
self.y = y
它提供了我正在寻找的行为,但似乎没有很好的可伸缩性。有更好的办法吗
可以改用变量参数:
不要在签名中暴露父级的参数;把你收到的东西(如果有的话)传给MRO的下一堂课
您必须接受并传递任意关键字才能正确使用
super
,因此您也可以对父类的参数执行相同的操作,即使您已经“知道”了它们这也意味着总是为
__init__
使用关键字参数,因为您无法真正预测类的位置参数将如何与MRO上的另一个类交互(位置参数只能在先到先得的基础上使用,在多重继承的情况下,您根本不知道何时调用类的方法。)你的方法不错,是的,有一个更好的方法来做它也许比我的更好,但这里是我提出的希望这有帮助
示例:
相关问题 更多 >
编程相关推荐