首页 > 解决方案 > python中的__getattr__方法

问题描述

我今天遇到了这段代码,看起来很混乱

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在最后一行使用时,我们触发了__getattr__中的方法SubClass,然后委托给该getattr(self.tmp,attr)函数,如果该属性未定义且未给出默认值,该函数将引发异常。但是最后一行的值 3 是如何经过所有过程,最终返回getattr(a,'undefined_attribute',3)函数的呢?因为我们在委托时没有默认值的插槽,这getattr(self.tmp,attr)怎么可能?

标签: pythonoopdelegates

解决方案


在你的情况下

getattr(self.tmp,attr)

引发 AttributeError 并且如果 getattr 有第三个参数(默认值),那么它返回默认值而不是引发 AttributeError


推荐阅读