Python和中getattr,setattr self.__dict__

python getattr and setattr with self.__dict__

我一直在阅读关于重写getattr和setattr的内容,如果我使用self,就无法确定是否需要重写赋值。

有一次我举了个例子

1
a = OPT(foo='bar')

a.foo和一个[‘foo’]使用和不使用"getattr"和"setattr"声明。

如果我两者都需要,有人能解释一下吗?如果我这样做,为什么?谢谢!

1
2
3
4
5
6
7
class OPT(dict):
    __getattr__ = dict.__getitem__
    __setattr__ = dict.__setitem__

    def __init__(self, *args, **kwargs):
        super(OPT, self).__init__(*args, **kwargs)
        self.__dict__ = self


当你和你getattr重写setattr想给一些额外的类或集合when the user属性得到平安。for example:P></

1)你可能avoid manipulates安安当用户通过数据库属性返回INVALID,你只是不知道for an unknown属性。P></

2)属性是真的manipulations forwarded / delegated知道the valid属性,例如是not known that represents提前行级数据库和用户manipulates columns作为属性。的运行时间need to check if the given name column name属性matches,也许我喜欢和我的上/下的房屋,房屋等。P></

another thing is preferred to有时,子类的控制。inheriting instead of from a快译通,that contains类你可以在字典的创建。P></