Я изучал Python 3 (мой пример кода использует 3.7.2) и как правильно использовать super()
, когда класс наследует более одного класса.
Я прочитал эту страницу , и эту страницу и эту статью .Я думаю, что проблема заключается в том, что ссылки SO предназначены для более старой версии Python, в то время как статья предназначена для Python 3, но это все еще сбивает с толку.
Предположим, у меня был следующий код (не беспокойтесь, если вы думаете, что отношения можно смоделировать лучше, это всего лишь пример, иллюстрирующий мою проблему):
class Weapon:
def __init__(self, name, damage):
self.name = name
self.damage = damage
class Reloadable:
def __init__(self, amount):
self.amount = amount
class Sniper(Weapon, Reloadable):
def __init__(self, name, damage, amount, scope_type):
super().__init__(name, damage)
super().__init__(self, amount)
self.scope_type = scope_type
def adjust_scope(self):
print("Adjusting my scope")
Main:
gun = Sniper("Standard Sniper", 10, 20, "small")
gun.adjust_scope()
print(Sniper.__mro__)
и MRO
:
(<class 'inheritnacewithsuper.Sniper'>,
<class 'inheritnacewithsuper.Weapon'>,
<class 'inheritnacewithsuper.Reloadable'>, <class 'object'>)
Код работает и вызывает нужные родительские классы, но я хочу убедиться, что при использовании Python 3.7 и super()
делает ли super().__init__(name, damage)
и super().__init__(self, amount)
правильный способ инициализации родительских конструкторов?
В статье этого не делается, вместо этого он вызывает super()
только для одного класса (RightPyramid(Square, Triangle)
).
Я просто хочу убедиться, что я на правильном пути и использую надлежащие практики.