【发布时间】:2014-04-05 09:26:15
【问题描述】:
我一直在阅读有关覆盖 getattr 和 setattr 的内容,如果我在构造函数中使用 self.__dict__ = self ,我无法确定是否需要覆盖分配。
一旦我创建了一个类的实例
a = OPT(foo='bar')
a.foo 和 a['foo'] 使用和不使用 __getattr__ 和 __setattr__ 声明。
如果我两者都需要,谁能解释一下。如果我这样做,为什么?谢谢!
class OPT(dict):
__getattr__ = dict.__getitem__
__setattr__ = dict.__setitem__
def __init__(self, *args, **kwargs):
super(OPT, self).__init__(*args, **kwargs)
self.__dict__ = self
【问题讨论】:
-
设置
self.__dict__ = self可能不是一个好主意。你想用这段代码完成什么? -
我以 obj 或 dict 的形式访问该类。所以我可以做 a['bar'] 或 a.bar。喜欢this post
-
问题是如果有人做
a['keys'] = 2,他们会踩到dict的keys()方法,等等。 -
哈,我没想到。我以前见过这个实现。有很多关于它的帖子,但我不记得这个问题出现了。
-
@BrenBarn 的评论才是真正的答案。
标签: python