MaN*_*KuR 3 python getattr python-2.7
我不知道这是否是getattr
build_in方法的预期行为.
getattr
即使实际参数(2nd)满足条件,也会执行默认(第3个)参数.例:
def func():
print('In Function')
class A:
def __init__(self):
self.param = 12
a = A()
Run Code Online (Sandbox Code Playgroud)
当我运行getattr(a, 'param', func())
它时给出这个结果:
In Function
12
Run Code Online (Sandbox Code Playgroud)
注意In Function
我不想要的.
但是当我执行getattr(a, 'param1', func())
ie输出时它完全正常
In Function
Run Code Online (Sandbox Code Playgroud)
但我只想要结果12
好像满足了条件.请让我知道为什么getattr
会有这样的行为,我们可以阻止他们这样做(如果有第二个参数,那就不是执行第三个arg),如果以Pythonic方式共享另一种方式,我将不胜感激.首先要记住的一件事是检查是否param1
存在使用hasattr
然后做必要的事情.
在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
Run Code Online (Sandbox Code Playgroud)
函数does_nothing
实际上对传递的参数没有任何作用.但是必须在函数调用完成之前评估参数.
print
然而,该声明不会影响结果getattr
; 有点副作用.如果未找到该属性return
,则使用该函数的值.
归档时间: |
|
查看次数: |
495 次 |
最近记录: |