***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方***

1.python作为一种动态语言,他的动态绑定机制允许在运行过程中动态的给class或者对象实例添加方法和属性,这个在静态语言中比如java是很难做到的;

  1)动态绑定属性:

    Python面向对象编程高级特性-LMLPHP  

    Python面向对象编程高级特性-LMLPHP

  2)动态绑定方法

    给一个实例绑定的方法对于其他实例和类都是不可见的:(这里也说明给一个实例动态绑定方法必须用MethodType(func, instance)

    Python面向对象编程高级特性-LMLPHP

    但是给类绑定的方法对于所有的实例都是可见的

    Python面向对象编程高级特性-LMLPHP

2.__slots__ = ('attribute1, attribute2') 为了限制对类的绑定属性名称,但是对于继承的子类不起作用:

    Python面向对象编程高级特性-LMLPHP

    对于继承的子类没有限制作用:

    Python面向对象编程高级特性-LMLPHP

    只要类里面有了 __slots__ = () 语句,就只能对类的对象绑定括号里面的属性和从父类继承的允许绑定的属性;(分为两种,父类有slots语句和分类没有slots语句):

    父类没有slots语句,子类虽然有限制,但是还是可以绑定其他类型:

    Python面向对象编程高级特性-LMLPHP

    父类有slots语句的上面已经有了,就不截图演示了;

3.多重继承:

  1)java只允许单重继承,pyhon允许多重继承,用MixIn设计实现;

  2)MixIn的好处就是给类增加多个功能,有较好的扩展性,将功能写成XXXMixIn类,直接继承就可以获得其属性和方法;

  3)使用MixIn就不要设计多层的复杂的继承关系;

04-15 13:35