为什么`object .__ init__`不带参数
问题内容:
为什么不object.__init__
采取*args, **kwargs
作为参数?据我所知,这以一种非常烦人的方式破坏了一些简单的代码,没有任何好处:
假设我们要确保__init__
所有父类的所有都被调用。只要每个init都遵循简单的调用约定,super().__init__
就可以确保整个层次结构都运行一次,并且恰好运行一次(也不必专门指定父级)。当我们传递参数时出现问题:
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")
解决方法是什么,什么是最好的一般方法(在我的特定情况下很容易解决,但是依赖于层次结构的其他知识)解决方法?我所能看到的最好的方法是检查父对象是否为对象,在这种情况下不要给它任何参数..太丑陋了。
问题答案: