@[toc]
全局只有一个实例
<font color=#03a3e3> 该实现方式在多线程场景下不安全
继承其他类的类称为派生类(derived class)
被其他类继承的类称为这些类的基类(base
class)
需要注意圆括号中基类的顺序:<font color=#03a3e3> 从左到右搜索 <font>
多继承会导致菱形 diamond关系:有至少一个基类可以从子类经由多个继承路径到达
基类方法可能被多次调用
防止重复访问,每个基类只调用一次
通过子类实例对象课调用父类已被覆盖
慎用多继承(二义性)
– 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
– 运算符重载不能改变其本来寓意
– 运算符重载只是一种 “语法上的方便” (sugar)
– 是一种函数调用的方式
估计是讲不明白。只能尽力。面向对象的基础需要再理解一下。self是第一个参数。在python里是指“实例”本身。就是自己。
这个class
A有一个属性是x
other是第二个参数,它代表另一个class
A的实例。当然它也有一个属性x
__add__是一个重载加号的函数。意思是将两个class
A实例相加,结果等于两个实例的x变量相加之和。
other.x与self.x当然是指不同实例中的变量x
自定义类在+右边的时候,需要定义 __radd__(self, other) 方法。如果左侧的obj没有定义__add__,那么python会自动调用右侧obj的__radd__。其它运算符也是这样的。都是前面加个r表示右侧,例如__rmul__