Python学习笔记 __slots__ 限制类属性
2016-12-28 23:46
399 查看
Python允许在定义class的时候,定义一个特殊的slots变量,来限制该class能添加的属性
但是为什么这样就可以呢:
答: 现在你给第二个代码块中的Object加上属性 slots 试试:
会发现抛出了同样的异常。 object 、 list 、 dict 等内置函数都如此。
拥有 slots 属性的类在实例化对象时不会自动分配 dict ,而 obj.attr 即 obj.dict[‘attr’], 所以会引起 AttributeError
对于拥有 slots 属性的类的实例 Obj 来说,只能对 Obj 设置 slots 中有的属性:
>>> 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.a 1 >>> Obj.c = 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'Object' object has no attribute 'c'
相关文章推荐
- Python3学习(23)--__slots__ 限制实例属性的绑定
- python进阶学习笔记(四)——python中访问限制、创建类属性、定义实例方法、定义类方法、类的继承
- 初学Python的学习笔记9----面向对象编程(获取对象信息、实例属性和类属性)、面向对象高级编程(使用__slots__、使用@property)
- python 学习笔记7(类/对象的属性;特性,__getattr__)
- Python进阶篇学习笔记一:异常机制、属性和生成器
- python学习笔记6.3-类的属性函数(@property)
- python cookbook第三版学习笔记十二:类和对象(三)创建新的类或实例属性
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- Python学习笔记——动态添加属性与方法
- Python学习笔记五(面向对象-类-方法-属性)
- 流畅python学习笔记:第十九章:动态属性和特性
- python学习笔记(属性和方法)
- python进阶学习笔记(五)——创建实例属性、初始化实例属性
- [Dynamic Language] Python __slots__ 限制绑定属性
- Python基础教程 第9章: 魔法方法、属性和迭代器 学习笔记
- python学习笔记13-python面向对象,属性,方法
- python学习笔记 访问限制
- 【Python】学习笔记——-7.2、访问限制
- Python-用__slots__限制类属性