TypeError: Error when calling the metaclass bases Cannot create a consistent method resolution order (MRO) for bases A2, A1 出現原因及其解決辦法


原本想測試繼承,出現了這個錯誤:

  源代碼

 1 class A1(object):
 2     def fo1(self):
 3         print "i'm A1"
 4 class A2(object):
 5     def fo1(self):
 6         print "i'm A2"
 7 class B1(A1,A2):
 8     def bar(self):
 9         print "i'm B1"
10 class B2(A2,A1):
11     def bar(self):
12         print "i'm B2"
13 class C(B1,B2):#提示出現錯誤的地方
14     pass
15 if __name__=='__main__':
16     m=C()
17     print C.__mro__
18     m.bar()
19     m.fo1()

錯誤行數出現在13行,實際就是構圖的時候產生了錯誤,(根據繼承先后廣搜構圖)

此時構圖為

顯然不能出現倆A1,因此會出現如上的報錯

要B都與A有聯系只能是下面這種繼承構圖才不會出錯

即將代碼修改為

class A1(object):
    def fo1(self):
        print "i'm A1"
class A2(object):
    def fo1(self):
        print "i'm A2"
class B1(A1,A2):
    def bar(self):
        print "i'm B1"
class B2(A1,A2):
    def bar(self):
        print "i'm B2"
class C(B1,B2):
    pass
if __name__=='__main__':
    m=C()
    print C.__mro__
    m.bar()
    m.fo1()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM