没有函数体的函数
- 在阅读python源码的时候, 常常能看到很多函数体为空 (pass) 的类方法, 这一度令我感到十分困惑. 例如 BaseServer 类中的service_actions方法:
def service_actions(self):
pass
多重继承
- python是一门支持多继承的语言.
- 通过多继承, 如果想要获得来自不同类的功能, 我们只要选择组合不同的类的功能,在定义类的时候依次作为父类传入即可.
class ChildClass(BaseClass1, BaseClass2):
pass
父类成员的调用顺序
- 如果在实例上调用一个没有绑定的方法, 那么python解释器会根据传参的顺序, 首先从参数中最左边的父类开始查找, 然后查找它的父类, 直到继承链的终点. 接下来在二个父类上开始同样的查找过程.
- 也就是说如果多个父类中定义了同名的方法, 那么实例在调用这个方法的时候, 只有最左边父类中的类方法会被调用.
重载
- 如果在实例中定义了和类同名的属性, 那么在实例上访问这个属性的时候, 父类属性将会被屏蔽, 这就是重载, 在调用方法的时候同样也会发生.
- 重载不仅仅可以发生在父类和子类, 类和实例这样的继承关系中, 还常常在多重继承中被使用.
- 在下面的代码中, 我们将利用方法重载的机制, 实现父类之间的关联. 以此体现出python源代码中大量"空函数"的作用.
class Human():
def __init__(self, name):
self.name = name
self.study()
self.read()
def study(self):
pass
def read(self):
pass
class Student():
def study(self):
print('%s is studying'%__class__.__name__)
def read(self):
print('%s is reading'%__class__.__name__)
class Teenager(Student, Human):
def __init__(self, name):
super().__init__(name)
Jack = Teenager('Jack')
Student is studying
Student is reading