This question already has answers here:
Why use setattr() and getattr() built-ins?

(4个答案)


5年前关闭。




这段代码之间有任何区别,该代码使用点表示法进行属性访问:
def get_foo(self):
    try:
        return self._attribute
    except AttributeError:
        self._attribute = 'something'
        return self._attribute

以及下面的代码,它使用了getattr函数:
def get_foo(self):
    try:
        return getattr(self, '_attribute')
    except AttributeError:
        self._attribute = 'something'
        return self._attribute

它们的行为对我来说似乎是相同的,但是我在某些代码中遇到了后一个示例,我很好奇为什么在这种情况下人们会选择调用getattr()

最佳答案

根据documentation,它们是等效的(除非提供了第三个参数以在属性不存在时抑制AttributeError)。



我想不出有什么理由比这里的普通点表示法更喜欢getattr。 。 。我唯一可以想到的是,如果我试图防止我的短毛猫提示protected-access(如果您有正当的理由,最好使用编译指示禁用它),这是我可能会想使用前者的地方。 。 。

关于python - 什么时候getattr()不像正常的属性访问?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34443349/

10-12 22:00