2016-10-26 2 views
0

나는 buildin 함수가이 방법으로 대체 될 수 있음을 알고있다.함수 호출에 강제 할당 값

>>> import os 
>>> print(os.system) 
<built-in function system> 

>>> os.system = "a" 
>>> print(os.system) 
a 

어떤 이유로 든 os.system을 소스 코드로 직접 쓸 수 없습니다. 그런 다음 getattr을 시도했습니다. 그러나 그것은 효과가 없습니다.

>>> import os 
>>> print(getattr(os, "system")) 
<built-in function system> 

>>> getattr(os, "system") = "a" 
    File "<stdin>", line 1 
SyntaxError: can't assign to function call 

이렇게 할 수 있습니까?

+0

"os.system을 직접 소스 코드로 작성할 수 없습니까?"라는 의미는 무엇입니까? – JETM

+0

@JETM : 제 목적을 위해 모듈, 클래스 또는 함수 이름을 제 코드에 하드 코딩 할 수 없습니다. –

답변

3

getattr은 속성 만 가져옵니다. 이 외에도 함수 호출이 유효한 assignment target이 아님을 나타냅니다.

은 당신이 원하는 것은 setattr입니다 :

>>> import os 
>>> os_system = os.system 
>>> setattr(os, 'system', 'a') 
>>> getattr(os, 'system') 
'a' 
>>> setattr(os, 'system', os_system) 
>>> getattr(os, 'system') 
<built-in function system> 

난 당신이 일을위한 좋은 이유가 희망한다.

+0

고맙습니다. getattr의 구현에 대해 더 설명 할 수 있기를 바랍니다. 함수에 값을 할당하는 것을 금지하는 방법? –

관련 문제