美文网首页
python 多重继承的一个问题

python 多重继承的一个问题

作者: lxt | 来源:发表于2018-10-25 21:21 被阅读18次

    2018-10-25
    刚遇到一个问题。当类C继承类A和类B时,我希望super(C, self).__init__()能把类A和类B的初始化方法都调用一下,然而

    class A(object):
        def __init__(self):
            self.a = 'a'
    
    class B(object):
        def __init__(self):
            self.b = 'b'
    
    class C(A, B):
        def __init__(self):
            super(C, self).__init__()
    
    
    >>> c = C()
    >>> c.a
    'a'
    >>> c.b
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
        c.b
    AttributeError: 'C' object has no attribute 'b'
    

    而如果强调类A、B均继承同一基类(即使是默认的object也行)的话,运行结果则如预期。

    class A(object):
        def __init__(self):
            super(A, self).__init__()
            self.a = 'a'
    
    class B(object):
        def __init__(self):
            super(B, self).__init__()
            self.b = 'b'
    
    class C(A, B):
        def __init__(self):
            super(C, self).__init__()
    
    
    >>> c = C()
    >>> c.a
    'a'
    >>> c.b
    'b'
    

    如果手动在C类初始化方法中指明类A和类B的初始化方法,同样可行。

    class A(object):
        def __init__(self):
            self.a = 'a'
    
    class B(object):
        def __init__(self):
            self.b = 'b'
    
    class C(A, B):
        def __init__(self):
            A.__init__(self)
            B.__init__(self)
    
    
    >>> c = C()
    >>> c.a
    'a'
    >>> c.b
    'b'
    

    为什么第一个版本的代码不能如期望的那样执行?

    另外,随手查了一下别人踩过的python多重继承的坑,除此之外还有很多。所以我还是重新设计一下类的结构,避免不必要的麻烦算了。

    相关文章

      网友评论

          本文标题:python 多重继承的一个问题

          本文链接:https://www.haomeiwen.com/subject/tffhtqtx.html