이것이 예상되는 동작 인 경우에는 getattr
built_in 메서드인지 확인하지 못합니다. getattr
은 실제 인수 (2nd)가 조건을 충족시키는 경우에도 기본 (3rd) 인수를 실행합니다. 예 :python getattr built_in 메서드가 기본 인수를 실행합니다.
def func():
print 'In Function'
class A:
def __init__(self):
self.param = 12
a = A()
내가 getattr(a, 'param', Func())
를 실행하면 그 결과를 제공합니다. 내가 원하지 않는 In Function
을 적어 두십시오. 내가 getattr(a, 'param1', func())
즉 출력
In Function
을 실행하지만 난 단지 조건을 만족하는 경우 12
로 결과 할 때
In Function
12
는하지만 완벽하게 잘 작동합니다. 제발 왜 getattr
이 그런 행동을하는지 알려주세요. 제 2 인자가 있다면 제 3의 arg를 실행하지 않아도됩니다.) Pythonic 방식으로 그것을하는 다른 방법을 공유하면 감사하겠습니다. 먼저 마음에 떠오르는 한 가지는 hasattr
을 사용하여 param1
이 존재하는지 확인한 다음 필요한 조치를 취하는 것입니다.
나는 이것이 여분의 함수를 추가하는 오버 헤드가 될 것이라고 생각하고 대신'hasattr' 검사와 함께 가야한다고 생각합니다. 그럼에도 불구하고 고마워. – MaNKuR
'a'가 attr'param'을 가질 때'func()'가 평가되지 않게하려면'getattr (a, 'param', None) 또는 func()'로 변경할 수 있습니다. '또는'다음에 유효한 코드는 * lazy *가됩니다. –
Thanks @ Chang.Jian, 이것은 유용한 트릭입니다. 어떻게 내가 이것을 놓칠 수 있습니다. – MaNKuR