簡體   English   中英

Python中的多重繼承-調用__init__時出錯

[英]Multiple inheritance in Python - error when invoking __init__

我有一個類D ,該類繼承了類BC ,它們都繼承了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

我不明白

BC類正在初始化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

BC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM