面向对象 魔术方法

多继承弊端


多继承的弊端会造成菱形继承这种情况,找不清调用顺序 super对象按照mro列表的顺序依次调用,解决菱形继承存在的问题 mro3
+` ​ 经典类:深度优先 (python2.x) 新式类:广度优先 (python3.x) ​ 写多继承时,尽量避免造成不同类相同方法名的情况,提高代码质量 高内聚,低耦合 高内聚:一个模块只完成一个任务,专一性高 低耦合:模块与模块之间可以彼此独立不冲突,方便移植复用. super调用父类方法 (1)super本身是一个类 super()是一个对象 用于调用父类的绑定方法 (2)super() 只应用在绑定方法中,默认自动传递self对象 (前提:super所在作用域存在self) (3)super用途: 解决复杂的多继承调用顺序




魔术方法(特定时机自动触发)
#__init__魔术方法(构造方法) ''' 触发时机:实例化对象,初始化的时候触发 功能:为对象添加成员 参数:参数不固定,至少一个self参数 返回值:无 ''' #__new__ 魔术方法 ''' 触发时机:实例化类生成对象的时候触发(触发时机在__init__之前) 功能:控制对象的创建过程 参数:至少一个cls接受当前的类,其他根据情况决定 返回值:通常返回对象或None ''' #__del__ 魔术方法(析构方法) ''' 触发时机:当对象被内存回收的时候自动触发[1.页面执行完毕回收所有变量 2.所有对象被del的时候] 功能:对象使用完毕后资源回收 参数:一个self接受对象 返回值:无 ''' #__call__ 魔术方法 ''' 触发时机:把对象当作函数调用的时候自动触发 功能: 模拟函数化操作 参数: 参数不固定,至少一个self参数 返回值: 看需求 ''' #__str__ 魔术方法 ''' 触发时机: 使用print(对象)或者str(对象)的时候触发 功能: 查看对象 参数: 一个self接受当前对象 返回值: 必须返回字符串类型 ''' #__repr__ 魔术方法 ''' 触发时机: 使用repr(对象)的时候触发 功能: 查看对象,与魔术方法__str__相似 参数: 一个self接受当前对象 返回值: 必须返回字符串类型 ''' #----普通变量的基本操作,如果应用在对象上,也有相应的魔术方法 #__bool__ 魔术方法 ''' 触发时机:使用bool(对象)的时候自动触发 功能:强转对象 参数:一个self接受当前对象 返回值:必须是布尔类型 ''' ''' 类似的还有如下等等(了解): __complex__(self) 被complex强转对象时调用 __int__(self) 被int强转对象时调用 __float__(self) 被float强转对象时调用 ... ... ''' #__add__ 魔术方法 (与之相关的__radd__ 反向加法) ''' 触发时机:使用对象进行运算相加的时候自动触发 功能:对象运算 参数:二个对象参数 返回值:运算后的值 ''' ''' 类似的还有如下等等(了解): __sub__(self, other) 定义减法的行为:- __mul__(self, other) 定义乘法的行为: __truediv__(self, other) 定义真除法的行为:/ ... ... ''' #__len__ 魔术方法 ''' 触发时机:使用len(对象)的时候自动触发 功能:用于检测对象中或者类中某个内容的个数 参数:一个self接受当前对象 返回值:必须返回整型 ''' ''' 类似的还有如下等等(了解): __iter__(self) 定义迭代容器中的元素的行为 __reversed__(self) 定义当被 reversed() 调用时的行为 __contains__(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为 ... ... '''
原文地址:https://www.cnblogs.com/max404/p/11837779.html