Правильный способ использования super
здесь для обоих методов для использования super
. Вы не можете предполагать, что Person
является последним (или, по крайней мере, ближайшим к последнему, перед object
) классом в MRO.
class Person:
def __init__(self, name, **kwargs):
super().__init__(**kwargs)
self.name = name
class Employee(Person):
# Optional, since Employee.__init__ does nothing
# except pass the exact same arguments "upstream"
def __init__(self, **kwargs):
super().__init__(**kwargs)
def first_letter(self):
return self.name[0]
Рассмотрите определение класса, подобное
class Bar:
...
class Foo(Person, Bar):
...
MRO для Foo
выглядит как [Foo, Person, Bar, object]
; вызов super().__init__
внутри Person.__init__
вызовет Bar.__init__
, а не object.__init__
, и Person
не сможет узнать, предназначены ли значения в **kwargs
для Bar
, поэтому должен передать их.