python类的继承和单例模式 singleton、运算符重载

Python042

python类的继承和单例模式 singleton、运算符重载,第1张

@[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__