类的设计模式

    由于、def均为可执行代码,因此func变量名这里被重新赋值了。

    2.委托设计:在Python中委托通常以拦截.__getattr__(self,'name')来实现。该方法会拦截对不存在属性的读取

    • 代理类实例对象可以利用.__getattr__(self,'name')将任意的属性读取转发给被包装的对象
    • 代理类可以有被包装对象的借口,且自己还可以有其他接口

      代理类

    • 变量名压缩只发生在class语句内,且仅仅针对__x这种以__开头的变量名
    • 该做法常用于避免实例中潜在的变量名冲突

    4.Python3中,实例方法有两种形式:

    • 绑定方法:通过对实例对象进行点号运算而获得类的函数属性,如,会返回绑定方法对象。Python在绑定方法对象中,自动将实例和函数打包

      • 绑定方法调用时,不需要手动传入实例对象,如obj.func(arg)

      普通方法和绑定方法

    • 子类与其实例继承了列出的所有超类的命名空间
    • 搜索属性时,Python会从左到右搜索class首行中的超类,直到找到匹配的名字

    6.工厂函数:通过传入类对象和初始化参数来产生新的实例对象:

    多重继承

    7.抽象超类:类的部分行为未定义,必须由其子类提供

    • 若子类也未定义预期的方法,则Python会引发未定义变量名的异常
    • 类的编写者也可以用assert语句或者raise异常来显式提示这是一个抽象类