为什么不object.__init__
作为*args, **kwargs
论据?据我所知,这以一种非常烦人的方式破坏了一些简单的代码,没有任何好处:
假设我们要确保__init__
调用所有父类的所有 's。只要每个 init 都遵循调用super().__init__
this 的简单约定,就可以保证整个层次结构都运行一次,并且只运行一次(也不必专门指定父级)。当我们传递参数时,问题就出现了:
class Foo:
def __init__(self, *args, **kwargs):
print("foo-init")
super().__init__(*args, **kwargs) # error if there are arguments!
class Bar:
def __init__(self, *args, **kwargs):
print("bar-init")
super().__init__(*args, **kwargs)
class Baz(Bar, Foo):
def __init__(self, *args, **kwargs):
print("baz-init")
super().__init__(*args, **kwargs)
b1 = Baz() # works
b2 = Baz("error")
这样做的原因是什么,最好的通用方法是什么(!在我的特定情况下很容易解决,但这依赖于层次结构的额外知识)解决方法?我能看到的最好的方法是检查父对象是否是对象,在这种情况下不要给它任何参数 .. 太丑了。