ITS·黑客

【Python】笔记17(实例属性、类属性/__slots__)

2017-05-13  本文已影响16人  阿凯Awesome

类创建的实例可以任意绑定属性,给实例绑定属性的方法是通过实例变量或者通过self变量,如对def里面的self绑定属性,self.name=....,也可以在class外部绑定属性。

类属性,类本身需要绑定属性,可以直接在class中定义属性,这个类的所有实例都可以访问这个属性。但如果实例本身有相应属性的话,会优先输出实例属性,屏蔽掉类的属性,但只是屏蔽;如果删除实例的对应属性,再次调用实例的这个属性时,此时实例的属性就会显示类的属性。因此,不要把实例属性和类属性使用相同的名字。


定义一个空的class(结束语句是pass)时,可以在外部给实例绑定属性,还可以在外部给实例绑定方法。

'从types导入的MethodType()函数,用于给实例绑定方法,第一个参数是外部定义的函数(这个函数中的参数一定要按照类的方法来定义,比如要有self),第二个参数是实例。这样就将外部定义的函数放入到了类中而成为了方法。

给一个实例绑定的方法,对另一个实例是不起作用的,如例子中是给实例s绑定方法,对新创建的s2实例是不起作用的。

但是为了给所有实例都绑定方法,可以给类class绑定方法。将类外部的函数传入类内部的方法与属性绑定类似,如Student.set_score=set_score


Python的动态语言环境使得可以灵活的在类内部外部定义方法、绑定属性,但如果要有所限制的话,这时__slots__变量就可以完成。

定义__slots__变量,来限制class实例能添加绑定的属性。(只对当前类实例起作用,对继承的子类不起作用;如果子类有也有定义__slots__,则子类允许添加绑定的属性就是自身的加上父类的)

如在类的定义过程中,__slots__=('name','age')。之后在类的外部,只能添加绑定name、age这两个属性,添加绑定其他的属性则会报错。

上一篇下一篇

猜你喜欢

热点阅读