python - 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)
怎么可能?
解决方案
在你的情况下
getattr(self.tmp,attr)
引发 AttributeError 并且如果 getattr 有第三个参数(默认值),那么它返回默认值而不是引发 AttributeError
推荐阅读
- javascript - 有没有办法在仅向该对象添加值时增加对象中的编号键
- wsl-2 - WSL-2 `code` 命令安装 vscode 而不是使用本地 windows 安装
- python - 在 Tkinter 标签内嵌入 Matplotlib 图
- ruby-on-rails - Rails 按范围排序
- python - 使用 Python 和华为 API 函数获取华为 USB 4G E3372 调制解调器的电话号码
- javascript - TypeScript - 使用可选属性定义数据模型
- python - Django:如何获取最新记录?
- python - 如何在其他列中用相应的 NaN 填充缺失的日期
- java - 如何获取代码以在二维数组的所有元素中打印随机数?
- bash - 如何确认空格或特殊字符是否以通配符模式转义?