我今天遇到了这段代码,看起来很混乱。
class ClassOne:
def __init__(self,some_object):
self.not_important_attribute=some_object
class ClassTwo:
def __init__(self,some_object):
self.tmp=ClassOne(some_object)
def __getattr__(self,attr):
return getattr(self.tmp,attr)
a=ClassTwo('not_important_string')
print(getattr(a,'undefined_attribute',3))
当我们在最后一行使用getattr
时,会触发SubClass
中的__getattr__
方法,然后委托给getattr(self.tmp,attr)
函数,如果属性未定义且没有给出默认值,则会引发异常。但是最后一行的值3是如何经过所有过程并最终返回到getattr(a,'undefined_attribute',3)
函数的呢?这是因为在委托getattr(self.tmp,attr)
时没有为默认值留下空间,这怎么可能呢?
__getattr__
时,它将返回我们在函数内定义的值,而不是类外部的默认值,请查看此链接。 - Tuấn Đoàn