# 子类拥有父类非私有属性的使用权
# type和object类的关系 type是所有类的元类(包括object),object是所有类的父类(包括type)
# 子类不能继承父类的私有属性和私有方法
# python3中的单继承采用就近原则,多继承体系分为 无重叠的多继承和有重叠的多继承
# 无重叠的多继承采用深度优先原则(C3算法),重叠的多继承(菱形继承)采用广度优先原则,重写可用
# 资源的覆盖,其实就是资源优先级高的覆盖掉了优先级低的
# 子类中调用了父类的方法,则传递的self和cls都指向子类
# __init__方法的资源累加问题
class A:
a = 1
def __init__(self):
self.aa = 2
pass
class B(A):
# 想在子类的init方法中新增一些属性
def __init__(self):
super().__init__()
self.b = 3
pass
b = B()
# b中并无a属性,但是有父类中变量a的使用权
print(b.a)
# 由于父类中的init方法中的self实际指向的是子类对象,实际上执行的是在子类内部添加了一个实例属性aa
print(b.__dict__)
# 尝试访问子类中新增的属性,以及从父类中继承的属性
print(b.b)
# 由于子类中具备了自己的init方法,将会重写父类中的init,此时将不在具备aa属性
# print(b.aa) 这一行报错 AttributeError: 'B' object has no attribute 'aa'
# 可是既想保存A中属性,又想拥有自己新增的属性,该怎么做呢?super可以沿着MRO链条引用上一级(菱形继承,并不一定是父类)的属性
print(b.aa) # 此时会将上级的init方法设置的资源传递过来
python继承
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...