zoukankan      html  css  js  c++  java
  • python多继承

     1 # class People:  #经典类
     2 class People(object):  #新式类
     3     def __init__(self,name,age):
     4         self.name=name
     5         self.age=age
     6         self.friends=[]
     7     def eat(self):
     8         print("%s is eating." % self.name)
     9     def sleep(self):
    10         print("%s is sleeping." % self.name)
    11 class Relation(object):
    12     def make_friends(self,obj):
    13         print('%s is making friends with %s' %(self.name,obj.name))
    14         self.friends.append(obj)
    15         obj.friends.append(self)
    16 
    17 class Man(People,Relation):    #多继承,继承顺序从左到右
    18     def __init__(self,name,age,money):
    19         # People.__init__(self,name,age)
    20         super(Man, self).__init__(name,age)    #新式类写法
    21         self.property=money
    22         print('%s has %s yuan when he was born'%(self.name,self.property))
    23     def sleep(self):    #重构
    24         #People.sleep(self)    #继承父类
    25         super(Man,self).sleep()
    26         print('%s is dahaning' %  self.name)
    27 class Woman(Relation,People): 

    28 #多继承(构造函数只需要一个),继承顺序从左到右,
    29 #第一个父类有构造函数,就不会执行第二个父类的构造函数;如果第一个父类没有构造函数,就去第二个父类中找

    30 pass

    1 m1=Man('alex',33,10)
    2 w1=Woman('May',35)
    3 
    4 m1.make_friends(w1)
    5 print(m1.friends[0].name)
    6 print(w1.friends[0].name)

    Man和Woman类都继承了People和Relation两个父类,但Relation类中没有构造函数。Woman实例化时,会先去Relation类中去找构造函数,因为没找到,所以去People类中再找构造函数(从左往右的顺序)。

    关于继承顺序:

    在python2中新式类是按广度优先继承的,经典类是按深度优先继承的
    python3中新式类和经典类都是按广度优先继承的
     1 class A(object):
     2     def __init__(self):
     3         print('A')
     4 class B(A):
     5     pass
     6     # def __init__(self):
     7     #     print('B')
     8 class C(A):
     9     def __init__(self):
    10         print('C')
    11 class D(B,C):
    12     pass
    13 
    14 
    15 d=D()
    广度优先:

    B->C->A

     
  • 相关阅读:
    FP-growth算法思想和其python实现
    HDInsight Command
    OpsMgr Connector 20070
    Exchange: How to get Mailbox size in Exchange Shell?
    Get members for ‘Dynamic Distribution Group’
    Hadoop 学习之路-开篇
    Office365 配置完成ADFS之后修改密码之后需要删除登陆信息
    添加只读访问权限到邮箱里的所有文件夹
    使用 Windows PowerShell 连接到 Lync Online
    windows 7无法打补丁
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/8410724.html
Copyright © 2011-2022 走看看