打印在\u getattr中不起作用__

2024-04-25 21:46:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我上这个班:

class Meta:
    def __getattr__(self, atr):
        print('get', atr)
    def __setattr__(self, atr, atr_value):
        print('{0} with value {1} added'.format(atr, atr_value))
        self.__dict__[atr] = atr_value

当我设置一个属性-print起作用时:

^{pr2}$

但当我叫它的时候:

^{3}$

返回值时没有print输出。在

我们将不胜感激。在


Tags: selfformataddedget属性valuedefwith
3条回答

如果属性在类或实例字典中,则不会调用__getattr__。这是__setattr__有意造成的不对称。在

如果您想要完全控制,请实现__getattribute__。在

只有当属性不存在时才会调用__getattr__。您要重写__gettattribute__。在

def __getattribute__(self, name):
    print("get", name)
    return object.__getattribute__(self, name)

在新样式类中,只有在实例或其类上找不到属性时才会调用^{}(对于旧样式类也是如此)(这也包括基类)。在

在新样式的类中,可以通过重写^{}来实现这一点。在

相关问题 更多 >