python getattr内置方法执行默认参数

时间:2016-07-26 12:23:11

标签: python python-2.7 getattr

我不知道这是否是getattr built_in方法的预期行为。 即使实际参数(第2个)满足条件,getattr也会执行默认(第3个)参数。 例如:

def func():
    print('In Function')

class A:
    def __init__(self):
        self.param = 12

a = A()

当我运行getattr(a, 'param', func())时,它会给出以下结果:

In Function
12

请注意我不想要的In Function

但是当我执行getattr(a, 'param1', func())即输出

时,它完全正常
In Function

但如果满足条件,我只希望结果为12。请让我知道为什么getattr有这样的行为,我们可以阻止它们这样做(如果有第二个参数,那就不执行第三个arg),如果分享以Pythonic方式执行它的替代方法,将不胜感激。 首先要考虑的一件事是使用param1检查hasattr是否存在然后做必要的事情。

1 个答案:

答案 0 :(得分:6)

getattr执行之前,必须评估所有传递的参数。 func()是其中一个参数,尝试评估它将执行print语句。无论是否找到该属性,都必须先评估func()

这不是getattr所特有的,它是如何在Python中使用函数及其参数的。

请考虑以下事项:

>>> def does_nothing(any_arg): pass
...
>>> def f(): print("I'll get printed")
...
>>>
>>> does_nothing(f())
I'll get printed

函数does_nothing实际上对传递的参数没有任何作用。但是必须在函数调用通过之前评估参数。

print声明不会影响getattr的结果;一种副作用。如果未找到该属性,则使用该函数的return值。

相关问题