美文网首页ITS·黑客
【Python】笔记17(实例属性、类属性/__slots__)

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

作者: 阿凯Awesome | 来源:发表于2017-05-13 21:00 被阅读16次

类创建的实例可以任意绑定属性,给实例绑定属性的方法是通过实例变量或者通过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这两个属性,添加绑定其他的属性则会报错。

相关文章

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

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

  • Python>面向对象高级编程

    1. __slots__ Python里能够随便给实例(instance)增加属性,为了达到限制属性的目的,可以...

  • Python学习笔记09-面向对象高级编程

    __slots__属性 在python中class被实例化后仍然可以绑定新属性和方法,这就是动态语言的特性。 注意...

  • 05面向对象高级编程

    __slots__限制实例的属性,如只允许对Student实例添加name和age属性 classStudent(...

  • 使用 __slots__

    使用 __slots__ 创建一个类的实例后,可以给实例绑定任何属性和方法, 给一个实例绑定属性和方法,对另外一个...

  • [python]面向对象高级编程1

    __slots__限制class实例能添加的属性 a = 1b = aa = 2b = 1 定义a为类1定义实例在...

  • Python实例变量和类变量

    Python实例变量和类变量 类变量(类属性): 类变量属于类所有,所有实例共享一个变量 实例变量(实例属性) 实...

  • __slots__

    __slots__变量,来限制class实例能添加的属性 例:

  • 实例属性和类属性

    实例属性和类属性: 由于Python是动态语言,根据类创建的实例可以任意绑定属性。 (1)给实例绑定属性的方法是通...

  • 魔术方法、特殊方法

    __slots__ 默认情况下Python用一个字典来保存一个对象的实例属性,字典浪费了很多内存。Python不能...

网友评论

    本文标题:【Python】笔记17(实例属性、类属性/__slots__)

    本文链接:https://www.haomeiwen.com/subject/zrhfxxtx.html