Python学习笔记 __slots__ 限制类属性

来源:互联网 发布:snapgene mac 编辑:程序博客网 时间:2024/06/07 04:01

Python允许在定义class的时候,定义一个特殊的slots变量,来限制该class能添加的属性

>>> obj = object()>>> obj.name = "whatever"Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'object' object has no attribute 'name'

但是为什么这样就可以呢:

>>> class Object(object):pass...>>> Obj = Object()>>> Obj.name = "whatever">>> Obj.name'whatever'>>>

答: 现在你给第二个代码块中的Object加上属性 slots 试试:

>>> class Object(object):...     __slots__ = {}...>>> Obj = Object()>>> Obj.name = "whatever"Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'Object' object has no attribute 'name'

会发现抛出了同样的异常。 object 、 list 、 dict 等内置函数都如此。

拥有 slots 属性的类在实例化对象时不会自动分配 dict ,而 obj.attr 即 obj.dict[‘attr’], 所以会引起 AttributeError

对于拥有 slots 属性的类的实例 Obj 来说,只能对 Obj 设置 slots 中有的属性:

>>> class Object(object):...     __slots__ = {"a","b"}...>>> Obj = Object()>>> Obj.a = 1>>> Obj.a1>>> Obj.c = 1Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'Object' object has no attribute 'c'
0 0
原创粉丝点击