类的 slots 列表
类的 slots 列表:
* 作用:
限定一个类创建的实例只能有固定的属性(实例变量)
不允许对象添加列表之外的属性(实例变量)
防止用户因错写属性名而发生程序错误
* 说明:
slots 属性绑定一个字符串列表
含有 slots 属性的类所创建的实例对象没有 dict 属性,
即此实例不用字典来存储对象的实例属性
* 示例见:
class Human:
__slots__ = ['name', 'age'] # 限定实例变量的属性 防止误写变量名错误
def __init__(self, n, a):
self.name = n
self.age = a
def info(self):
print(self.name, '今年', self.age, '岁')
h1 = Human('小张', 8)
h1.info() # ??? 小张 今年 8 岁
# 没有slots 列表之前,没有限定时的 误写变量名字
# h1.Age = 9 # 新创建了一个实例属性,没有改变age属性。变量名区分大小写
# h1.info() # ??? 小张 今年 8 岁
# 添加列表后
print(h1.__dict__)
AttributeError: 'Human' object has no attribute '__dict__'
# 限定实例变量属性后,对象不再拥有 __dict__ 属性
h1.Age = 9 # 创建slots列表之后的误写 会报错
AttributeError: 'Human' object has no attribute 'Age'
# 类对象中没有该 实例变量
# 限定实例变量后不能再添加其余变量
h1.info() # ??? 小张 今年 8 岁