码迷,mamicode.com
首页 > 其他好文 > 详细

使用__slots__

时间:2015-10-21 00:17:03      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

要限制实例的属性怎么办?比如,只允许对Student实例添加nameage属性。

为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性:

class Student(object):
    __slots__ = (name, age) # 用tuple定义允许绑定的属性名称

然后,我们试试:

>>> s = Student() # 创建新的实例

>>> s.name = Michael # 绑定属性‘name‘

>>> s.age = 25 # 绑定属性‘age‘

>>> s.score = 99 # 绑定属性‘score‘
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Student object has no attribute score

由于‘score‘没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。

使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

 class GraduateStudent(Student):
     pass


>>> g = GraduateStudent()
>>> g.score = 9999

除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__

使用__slots__

标签:

原文地址:http://www.cnblogs.com/singeldiego/p/4896492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!