类方法和静态方法
method
- 通过实例调用
- 可以引用类内部的任何属性和方法classmethod
- 无需实例化
- 可以调用类属性和类方法
- 无法取到普通的成员属性和方法staticmethod
- 无需实例化
- 无法渠道类内部的任何属性和方法,完全独立的一个方法
继承相关问题
class Animal:
def run(self):
print('animal running')
class Lion(Animal):
def run(self):
print('lion running')
class Tiger(Animal):
def run(self):
print('tiger running')
class LeoTiger(Lion, Tiger):
pass
cub = LeoTiger()
isinstance(cub, Lion)
isinstance(cub, Tiger)
- 多继承
- 方法和属性的继承顺序:Cls.mro()
- 菱形继承问题
继承关系示意
菱形继承
A.foo()
/ \
B C.foo()
\ /
D.mro() # 方法的继承顺序,由 C3 算法得到
- Mixin: 通过单纯的 mixin 类完成功能组合,所有继承的类的功能不会有任何的交叉
- super
class A:
def __init__(self):
print('enter A')
self.x = 111
print('exit A')
class B(A):
def __init__(self):
print('enter B')
self.y = 222
A.__init__(self)
# super().__init__()
print('exit B')
class C(A):
def __init__(self):
print('enter C')
self.z = 333
A.__init__(self)
# super().__init__()
print('exit C')
class D(B, C):
def __init__(self):
print('enter D')
B.__init__(self)
C.__init__(self)
# super().__init__()
print('exit D')
d = D()