在
明显,这个方法不起作用是因为
另一个限制是我不想改变
A.__init__
中,我调用了self.func(argument)
:class A(object):
def __init__(self, argument, key=0):
self.func(argument)
def func(self, argument):
#some code here
我想要修改B
中A.func
的签名。通过A.__init__
,B.__init__
调用了B.func
:
class B(A):
def __init__(self, argument1, argument2, key=0):
super(B, self).__init__(argument1, key) # calls A.__init__
def func(self, argument1, argument2):
#some code here
明显,这个方法不起作用是因为
B.func
的签名需要两个参数,而A.__init__
只提供了一个参数。我该怎么解决这个问题?或者说我的类设计有什么问题吗?
key
是A.__init__
的默认参数。 argument2
并不是针对key
的。 argument2
是B
使用但A
没有的额外参数。B还使用key
,并为其设置了默认值。另一个限制是我不想改变
A.__init__
的签名。 key
通常会是0。所以我希望允许用户写A(arg)
而不是A(arg, key=0)
。
__init__
中调用应该被覆盖的方法是危险的,因为这些方法可能依赖于尚未发生的子类初始化。 - user2357112super(B, self).__init__(argument1, argument2)
时,您是否希望将argument1
和argument2
传递给B.func()
?在这方面,A.__init__()
中的key=0
的作用是什么,它是否应该捕获argument2
的值? - Martijn Pieters