我想清理大量使用此类的代码:
class ADict(object):
pass
#example usage
a = ADict()
a.attr = 1
我要做的是保留__getattr__
表示法,但添加一个构造函数参数,该参数是允许的ADict键列表,也在__getattr__
和{{1}中检查}}。除了它是否是一个好主意,它是否可行?怎么样?这是我失败的尝试(由于无限递归而无法工作):
__setattr__
答案 0 :(得分:0)
您正在寻找的是插槽魔术变量。基本上,如果您定义它,则限制给定对象可以具有的属性:
class ADict:
__slots__ = ['foo', 'bar', 'baz']
a = ADict()
a.foo = 1 # this will work
a.another_thing = 1 # this will throw an AttributeError
但是,在实现之前,请仔细阅读文档,因为除非您对应用程序有非常严格的内存要求,否则通常不是一个好主意。