默认我们可以给 class 实例绑定任何属性和方法, 这就是动态语言的灵活性如果我们想要限制 class 的属性怎么办? 比如, 只允许对 Student 实例添加 name 和 age 属性. 为了达到限制的目的, Python 允许在定义 class 的时候, 定义一个特殊的__slots__变量, 来限制该 class 能添加的属性:
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- class Student(object):
- __slots__ = ("name","age")
- def __init__(self,name,age):
- self.name=name
- self.age=age
- def print_type(self):
- print("my name is %s,age is %s" %(self.name,self.age))
- p=Student("ye",18)
- p.addr='重庆市' #新增 addr 属性会报错
- p.print_type()
由于'addr'没有被放到__slots__中, 所以不能绑定 addr 实例属性, 试图绑定 addr 将得到 AttributeError 的错误.
使用__slots__要注意,__slots__定义的属性仅对当前类起作用, 对继承的子类是不起作用的:
除非在子类中也定义__slots__, 这样, 子类允许定义的属性就是自身的__slots__加上父类的__slots__.
来源: http://www.bubuko.com/infodetail-2773204.html