python2中类分为两种 新式类、经典类
//新式类
class A(object):
pass
//经典类
class A:
pass
python3中两种写法都是新式类
1.新式类与经典类 MRO算法不同
????????经典类:深度优先遍历
????????新式类:广度优先遍历
2.新式类相同父类只执行一次构造函数,经典类重复执行多次。
类的继承分单继承和多继承
class A(object):
def __init__(self, content):
self.content = content
def Asay(self):
print(self.content)
class B(object):
def __init__(self, content):
self.content = content
def Bsay(self):
print('Bsay'+self.content)
//单继承
class C(A):
pass
//多继承
class D(A,B):
pass
创建实例
?
class A(object):
def __init__(self, content):
self.content = content
def Asay(self):
print(self.content)
class B(object):
def __init__(self, content):
self.content = content
def Bsay(self):
print('Bsay'+self.content)
//多继承
class D(A,B):
def Dsay():
print('Dsay')
class E(A,B):
def __init__(self, content):
self.content = content
?d = D('dhellow')
e = E('ehellow')
d.Asay()// 此时输出dhellow 因为d类没有构造函数,会通过mro进行遍历父类找到A的构造函数
e.Asay()// 此时输出ehellow e类构造函数被执行,但是A类的构造没有执行,但是绑定到的self是e执行方法时会调用self.content的值
//B虽然遍历排在A后面,但是如果B中有和A相同属性或方法时会把A覆盖
|