这段代码之间有什么区别,它使用点表示法进行属性访问:
def get_foo(self):
try:
return self._attribute
except AttributeError:
self._attribute = 'something'
return self._attribute
Run Code Online (Sandbox Code Playgroud)
以及使用该getattr函数的以下代码:
def get_foo(self):
try:
return getattr(self, '_attribute')
except AttributeError:
self._attribute = 'something'
return self._attribute
Run Code Online (Sandbox Code Playgroud)
他们对我来说似乎表现得一样,但我在一些代码中遇到了后一个例子,我很好奇为什么getattr()在这种情况下会选择调用。
根据文档,它们是等效的(除非提供第三个参数来抑制AttributeError属性不存在时的情况)。
\n\n\n返回对象的命名属性的值。名称必须是字符串。如果字符串是 object\xe2\x80\x99s 属性之一的名称,则结果是该属性的值。例如,
\ngetattr(x, \'foobar\')相当于x.foobar. 如果指定的属性不存在,则返回默认值(如果提供),否则AttributeError引发。
我想不出有什么理由getattr比普通的点符号更喜欢这里。。。我唯一能想到我可能会想使用前者的地方是,如果我试图阻止我的 linter 抱怨protected-access(如果您有正当理由这样做,最好使用编译指示禁用它)。。。
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |