Почему `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")
Каковы причины этого и каков лучший обходной путь (! Он легко решаем в моем конкретном случае, но который зависит от дополнительных знаний об иерархии)? Лучшее, что я могу видеть, это проверить, является ли родитель объектом, и в этом случае не выдавать ему никаких аргументов ... ужасно ужасно.