Dict与对象一样__getattr__但是

时间:2017-01-20 16:55:38

标签: python

我想清理大量使用此类的代码:

class ADict(object):
  pass
#example usage
a = ADict()
a.attr = 1

我要做的是保留__getattr__表示法,但添加一个构造函数参数,该参数是允许的ADict键列表,也在__getattr__和{{1}中检查}}。除了它是否是一个好主意,它是否可行?怎么样?这是我失败的尝试(由于无限递归而无法工作):

__setattr__

1 个答案:

答案 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

但是,在实现之前,请仔细阅读文档,因为除非您对应用程序有非常严格的内存要求,否则通常不是一个好主意。