gpt4 book ai didi

python - Python 中的多重继承

转载 作者:行者123 更新时间:2023-11-28 20:45:36 25 4
gpt4 key购买 nike

我正在开始学习 Python 语言,需要对我的代码进行评论以及对我收到的错误消息的解决方案。

代码创建了一个有两个祖先的 Robot 类;变形金刚和高达。第三类 Hybrid 继承自这些。我可以毫无错误地实例化一个变形金刚和一个高达。实例化 Hybrid 会返回错误。代码和错误如下:

主.py

from multiple_inheritance import Robot, Transformer, Gundam, Hybrid

tito = Gundam("Tito", "Japan")
optimus = Transformer("Optimus Prime", "Mars")
Jaeger = Hybrid("Striker", "US")

print(tito)
print(optimus)

多重继承

class Robot(object):
"""A robot class"""
def __init__(self, name):
self.name = name

def __str__(self):
return "{name}".format(name = self.name)

class Transformer(Robot):
"""A transformer"""
def __init__(self, name, planet):
self.planet = planet
super(Transformer, self).__init__(name)

def __str__(self):
return "Name = {name}, Planet = {planet}".\
format(name = self.name, planet = self.planet)

class Gundam(Robot):
"""A Gundam"""
def __init__(self, name, country):
self.country = country
super(Gundam, self).__init__(name)

def __str__(self):
return "Name = {name}, Country = {country}".\
format(name = self.name, country = self.country)

class Hybrid(Transformer, Gundam):
"""Ultimate Robot"""

错误信息

Traceback (most recent call last):
File "D:\Tech\Python\my_code\unit10\multiple_inheritance_main.py", line 5, in <module>
Jaeger = Hybrid("Striker", "US")
File "D:\Tech\Python\my_code\unit10\multiple_inheritance.py", line 13, in __init__
super(Transformer, self).__init__(name)
TypeError: __init__() missing 1 required positional argument: 'country'

最佳答案

Hybrid 的 mro 看起来像这样:

>>> Hybrid.__mro__
(<class '__main__.Hybrid'>, <class '__main__.Transformer'>, <class '__main__.Gundam'>, <class '__main__.Robot'>, <type 'object'>)

如您所见,在 Transformer 之后,下一个类是 Gundam,当从 Transformer 的 __init__ 调用它时,您没有传递足够的参数给它>:

class Transformer(Robot):
"""A transformer"""
def __init__(self, name, planet):
self.planet = planet
#####This calls Gundam's __init__
super(Transformer, self).__init__(name)

所以,重点是 super() 调用 MRO 中的下一个类,而不是如您预期的那样调用 Transformer 的基类。


super() 相关的非常好的帖子:Python’s super() considered super!

关于python - Python 中的多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com