1. 实例不能修改类的属性值
class Student():
num = 100
studentA = Student()
studentB = Student()
studentA.num = 200 #给实例studentA添加一个num属性,赋值200,并没有修改类Student属性num的值
print(studentA.num) # 200
print(studentB.num) # 100
2. 多态:就是JS中的原型链,JavaScript中对象调用一个方法时,如果该对象没有这个方法,就去原型链上寻找,有就调用自身的方法
3. 多继承:父类方法名字相同时,继承有顺序,可以参考子类的__mro__属性(有算法)
class Base(object):
def test(self):
print("-----Base")
class A(Base):
def test(self):
print("----A")
class B(Base):
def test(self):
print("----B")
class C(B):
pass
class D(A):
def test(self):
print("----D")
class E(C,D):
pass
e=E()
e.test()
print(E.__mro__)
# ----B
# (<class '__main__.E'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.A'>, <class '__main__.Base'>, <class 'object'>)
多继承顺序算法是C3算法:不是深度优先也不是广度优先
广度优先的缺点:
在继承一中, A和D都有test方法,C没有 ,先找C再找D,这样就好像C没有继承A中的test方法
深度优先的缺点:
在继承二中,A和D都有test方法,但是函数功能不同,E访问test方法,先找C在找A,在A找到test方法
使得D中的方法不能被E继承