使用slots 知道了__slots
主要为了限制类中的属性范围,防止随意添加。但是同样的和python 中的@property以及在继承中的使用 类似,在继承中不起效果
class Publisher:
__slots__ = ('_data', 'name')
def __init__(self):
pass
class DefaultFormatter(Publisher):
__slots__=('_data', 'name')
def __init__(self, name):
self.name = name
self._data = 0
self.age = 6
def main():
df = DefaultFormatter('test1')
print(df)
df.data = 666
print(df.data)
print(df)
df.data2 = 666
上述代码并没有报错。而如果改为
class DefaultFormatter(object):
__slots__=('_data', 'name')
def __init__(self, name):
self.name = name
self._data = 0
self.age = 6
运行时编译器会正常报错
AttributeError: 'DefaultFormatter' object has no attribute 'age'
网友评论