[英]Multiple inheritance in Python - error when invoking __init__
我有一個類D
,該類繼承了類B
和C
,它們都繼承了A
,但是當我創建類D
的實例時,發生了此錯誤:
johni@johni-pc:~/Draft$ python3.4 main.py
Traceback (most recent call last):
File "main.py", line 35, in <module>
d = D()
File "main.py", line 31, in __init__
super().__init__()
File "main.py", line 19, in __init__
super().__init__("pg")
TypeError: __init__() takes 1 positional argument but 2 were given
我不明白
B
和C
類正在初始化A
類中的參數driver
。 我的文件main.py
:
class A:
def __init__(self, driver):
self.driver = driver
@property
def driver(self):
return self.__driver
@driver.setter
def driver(self, valor):
self.__driver = valor
def run_driver(self):
print("I am executing with %s" % self.driver)
class B(A):
def __init__(self):
super().__init__("pg")
class C(A):
def __init__(self):
super().__init__("conn_pg")
class D(B, C):
def __init__(self):
super().__init__()
d = D()
print(d.run_driver())
為什么會發生此錯誤?
請注意, super
確保根據MRO(方法解析順序-請參見Python的super()如何與多重繼承一起工作? ),確保所有超類方法均被調用。 D
繼承自B
和 C
,因此發生以下情況:
D()
調用D.__init__
D.__init__
調用B.__init__
B.__init__
呼叫C.__init__
這是問題所在! C.__init__
呼叫A.__init__
我們永遠不會到達這里 目前尚不清楚為什么 D
繼承自兩者-當然不能有兩個driver
嗎? 如果確實需要處理此問題,請注意,所有__init__
方法都應編寫為采用相同的參數,例如add:
def __init__(self, *args):
# ^ ^ ^ ^ this part
到B
和C
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.