发布于2019-08-06 19:13 阅读(850) 评论(0) 点赞(1) 收藏(1)
就是在多继承上的顺序问题
py2经典类是按深度优先来继承得,新式类是按广度优先来继承的
py3经典类和新式类都是统一按广度优先来继承的
class People(object): # 新式类 经典类和新式类在多继承上的方式有所不同
def __init__(self, name, age):
self.name = name
self.age = age
self.friends = []
print("---doens't run ")
def eat(self):
print("%s is eating..." % self.name)
def sleep(self):
print("%s is sleeping..." % self.name)
def talk(self):
print("%s is talking..." % self.name)
class Relation(object):
def __init__(self, n1, n2):
print("init in relation")
def make_friends(self, obj):
print("%s is making friends with %s" % (self.name, obj.name))
self.friends.append(obj)
class Man(People, Relation): # 如果两个都有够着函数的话,谁在前面就执行谁的实例化,从左到右。如果其中一个没有,就执行另外一个的构造函数
def piao(self):
print("%s is piaoing...20s...done" % self.name)
def sleep(self):
People.sleep(self) # 调用父类的方法,在执行子类的方法,加self就是把自己实例传进去
print("man is sleeping")
class Women(People, Relation):
def get_birth(self):
print("%s is born a baby..." % self.name)
m1 = Man("zhangsan", 8)
# 结果:
# init in relation 当Relation在前面时,就去执行Relation,的实例化参数。class Man(Relation,People)
# ---doens't run 当People在前面时,就去执行People,的实例化参数。class Man(People,Relation)
再看
D继承BC,BC都继承A。继承的策略叫“广度优先”,就是先把横向的策略都查完,在往上面A查。python3里面都是广度优先。同样的场景(D继承BC,BC继承A,B里面没有初始化函数,C和A里面有初始化函数)在python2里面就是“深度优先。但是如果A继承于(object)新式类的话,”
BC里面都有就按D继承的顺序来
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
print("B")
class C(A):
def __init__(self):
print("C")
class D(B, C):
pass
obj = D()
#结果
# B
再看
B里面没有就找C
class A:
def __init__(self):
print("A")
class B(A):
pass
# def __init__(self):
# print("B")
class C(A):
def __init__(self):
print("C")
class D(B, C):
pass
obj = D()
#结果
# C
再看
BC里面都没有就找A
class A:
def __init__(self):
print("A")
class B(A):
pass
# def __init__(self):
# print("B")
class C(A):
pass
# def __init__(self):
# print("C")
class D(B, C):
pass
obj = D()
#结果
# A
链接:https://www.pythonheidong.com/blog/article/9326/993fad57627d117be167/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!