__slots__¶
@property和@funcname.setter两个装饰器可以讲实例对象的属性和实例对象的方法进行绑定。
1、功能¶
- 实例对象的哪些属性可以进行绑定,只有存在于__slots__元组中的属性才可以被绑定。
- 只有在元组中的属性才可以被定义。
2、对对象属性进行限定¶
class Person(object):
# 限定Person对象只能绑定_name, _age和_gender属性
__slots__ = ('_name', '_age', '_gender')
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def play(self):
if self._age <= 16:
print('%s正在玩飞行棋.' % self._name)
else:
print('%s正在玩斗地主.' % self._name)
def main():
person = Person('王大锤', 22)
person.play()
person._gender = '男'
# AttributeError: 'Person' object has no attribute '_is_gay'
- __slots__的元组中的属性,未必是已经在类中存在的属性。
- 上述例子中,__slot__中绑定了
_name_age_gender。则这三者才可以进行绑定或者赋值处理。 _is_gay因为不在元组中,所以当进行赋值操作的时候就报错了。