加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python中的多重继承问题!

发布时间:2020-12-20 11:16:31 所属栏目:Python 来源:网络整理
导读:为什么c.print_a()输出’B’? class A(object): def __init__(self): self.some_name = 'A' def print_a(self): print self.some_nameclass B(object): def __init__(self): self.some_name = 'B' def print_b(self): print self.some_nameclass C(A,B): de
为什么c.print_a()输出’B’?

class A(object):
    def __init__(self):
        self.some_name = 'A'

    def print_a(self):
        print self.some_name

class B(object):
    def __init__(self):
        self.some_name = 'B'

    def print_b(self):
        print self.some_name

class C(A,B):
    def __init__(self):
        A.__init__(self)
        B.__init__(self)

if __name__ == '__main__':
    c = C()
    c.print_a()
class A(object):
    def __init__(self,some_name='A'):
        self.some_name = some_name

    def print_a(self):
        print self.some_name

class B(object):
    def __init__(self,some_name='B'):
        self.some_name = some_name

    def print_b(self):
        print self.some_name

class C(A,B):
    def __init__(self):
        A.__init__(self,some_name='AAAAA')
        B.__init__(self,some_name='BBBBB')

if __name__ == '__main__':
    c = C()
    c.print_a()

解决方法

你这里只有一个对象; some_name属性在所有继承类的方法之间共享.你调用A .__ init__,将其设置为A,然后调用B .__ init__,将其更改为B.

另请注意,您正在调用基本方法;使用超级:

class A(object):
    def __init__(self):
        self.some_name = 'A'
        super(A,self).__init__()

    def print_a(self):
        print self.some_name

class B(object):
    def __init__(self):
        self.some_name = 'B'
        super(B,self).__init__()

    def print_b(self):
        print self.some_name

class C(A,B):
    def __init__(self):
        super(C,self).__init__()

if __name__ == '__main__':
    c = C()
    c.print_a()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读