我知道这段代码是正确的:
class A: def __init__(self): self.a = 'a' def method(self): print "method print" a = A() print getattr(a, 'a', 'default') print getattr(a, 'b', 'default') print getattr(a, 'method', 'default') getattr(a, 'method', 'default')()
这是错误的:
# will __getattr__ affect the getattr? class a(object): def __getattr__(self,name): return 'xxx' print getattr(a)
这也是错误的:
a={'aa':'aaaa'} print getattr(a,'aa')
我们应该在哪里使用__getattr__和getattr?
__getattr__
getattr
Alex的回答很好,但是自从您提出要求以来,它就为您提供了示例代码:)
class foo: def __init__(self): self.a = "a" def __getattr__(self, attribute): return "You asked for %s, but I'm giving you default" % attribute >>> bar = foo() >>> bar.a 'a' >>> bar.b "You asked for b, but I'm giving you default" >>> getattr(bar, "a") 'a' >>> getattr(bar, "b") "You asked for b, but I'm giving you default"
简而言之,答案是
你用
__getattr__以 确定 如何处理的属性 没有找到
和
getattr要 获得 的 属性