python 使用__slots__】的更多相关文章

如果我们想要限制实例的属性怎么办?比如,只允许对Student实例添加name和age属性. 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性: class Student(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称 然后,我们试试: >>> s = Student() # 创建新的实例 >>> s.name = 'M…
动态语言python 可以在程序运行的情况下给class加上功能.具体为 #引入一个 from types import MethodType #方法 #然后 s.set_age = MethodType(set_age, s, Student) #给一个实例绑定方法 #s是一个实例 然后set_age是外面定义的一个方法,student是s实例所属的类. 如果要给整个类绑定set_age方法的话 可以使用 from types import MethodType Student.set_sco…
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student(object): ... pass ... 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 >>> print s.name Michael 还可以尝试给实例…
在Python中,每个类都有实例属性.默认情况下Python用一个字典来保存一个对象的实例属性.这非常有用,因为它允许我们在运行时去设置任意的新属性. 然而,对于有着已知属性的小类来说,它可能是个瓶颈.这个字典浪费了很多内存.Python不能在对象创建时直接分配一个固定量的内存来保存所有的属性.因此如果你创建许多对象(我指的是成千上万个),它会消耗掉很多内存. 不过还是有一个方法来规避这个问题.这个方法需要使用__slots__来告诉Python不要使用字典,而且只给一个固定集合的属性分配空间.…
__slots__ @property 多重继承 定制类 枚举类 元类 [使用__slots__] 1.动态语言的一个特点就是允许给实例绑定任意的方法和变量,而静态语言(例如Java)必须事先将属性方法写进类里. 给实例绑定变量: >>> class Student: ... pass ... >>> s = Student() >>> s.name = 'Lily' >>> s.name 'Lily' 给实例绑定方法需要借助type…
1.运算符重载之反向运算 class A: def __init__(self,x): self.x = x def __add__(self, other): try: x = other.x return self.x + other.x except AttributeError: try: x = int(other) except: x = 0 return A(self.x + x) def __iadd__(self, other): print(self,'iadd') retu…
#定义一个类Student class Student(object): __slots__ = ('name','age') #用元组(tuple)的形式绑定属性名称 s = Student() s.name = 'xh' print s.name #xh #s.score = 88 #因为 __slots__中没有score属性,所以报错 #print s.score #AttributeError: 'Student' object has no attribute 'score' #定义…
''' 1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 2.引子:使用点来访问属性本质就是在访问类或者对象的__dict__属性字典(类的字典是共享的,而每个实例的是独立的) 3.为何使用__slots__:字典会占用大量内存,如果你有一个属性很少的类,但是有很多实例,为了节省内存可以使用__slots__取代实例的__dict__ 当你定义__slots__后,__slots__就会为实例使用一种更加紧凑…
# 注意:__slots__ 用来限制当前类的实例属性的,如:name.age才可被使用,添加其他的属性则报错 # 不会限制继承类的属性 class Person(): __slots__ = ("name", "age") def __init__(self): pass class Yang(Person): def __init__(self): pass if __name__ == "__main__": p = Person() p.…
在伯乐在线上看到了这篇文章,用Python的 __slots__ 节省9G内存,于是想测试下,对单个类,用__slots__节省内存效果会不会明显. 看完这个例子后,我们也会明白__slots__是用来干嘛的. :import sys :class test(object): : def __init__(self,name): : self.name = name : : :class test2(object): : __slots__ = ["name"] : def __ini…