二十五、面向对象5:python动态添加属性及方法、__slots__的作用
一、python是动态语言
动态语言目前非常具有活力。例如JavaScript便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C 、 C++ 等语言则不属于动态语言。
原先定义a的时候是一个数字类型的,现在让a保存的是一个函数,这就是动态语言的特点。
二、dir(对象)
查看该对象身上所有的属性和方法(包括所有自带的)
三、运行的过程中给对象(实例)绑定(添加)属性
四、运行的过程中给对象(实例)删除属性
#删除有两种方法:
del p.addr #1、用del删除添加的addr属性, del 对象名.属性名
delattr(p,"addr") #2、delattr(实例对象名,"属性名")
五、运行的过程中给类绑定(添加)属性
六、运行的过程中给对象绑定(添加)方法
1、 types.MethodType的作用:给对象添加方法
2、使用时记得导types包,后面括号里,给对象添加个方法
七、运行的过程中给类绑定(添加)方法
八、__slots__的作用
定义一个特殊的__slots__变量,来限制该class实例能添加的属性:
1、()里的可添加属性,且只能在外添加这两个属性
2、在类外添加属性,对 类.属性名 格式限制不起作用(对类添加的属性不起作用)
3、对类里面本身就含有的属性和方法不起限制作用,只对类外定义添加的属性、方法起作用。
4、__slots__定义的属性仅对当前类实例的对象起作用,对继承的子类实例出来的对象是不起作用的。
在子类中可以调用父类限制的方法。