사전에 함수를 가져온 다음 해당 함수에 객체 속성을 추가하는 코드 조각이 있습니다. 그러나 아마도 네임 스페이스로 인해 함수 내에서 액세스하는 데 문제가 있습니다. 내가 함수 속성을 표시하지 않습니다 내에서 내가 볼 수있는 속성, 그러나 DIR()를 설정 한 후 나는 디렉토리 (aFunction)를 할 경우특정 함수 인스턴스에 속성 할당
aFunction = FunctionsDictionary[key]
aFunction.someObject = someObject
aFunction()
def aFunction():
someObject.doSomething()
는 NameError global name 'someObject' is not defined.
를 제공합니다.
함수를 인수로 받아들이도록 코드를 변경할 수는 있지만 함수의 '인스턴스'에 설정된 이러한 특성을 참조하려면 어떻게해야합니까? 여기
는 또 다른 예이다 : 파이썬 현재 실행중인 함수에 대한 참조를 얻을 수있는 (좋은) 방법이 같은def myFunc():
print coolAttr
func = myFunc
func.coolAttr = "Cool Attribute"
func()
NameError: global name 'coolAttr' not defined
일반적으로 런타임에 함수 참조에 특성을 추가 할 수있는 것처럼 보이지 않습니다 (즉, 함수 정의에 적용된 데코레이터 외부). 속성을 할당 한 후 함수 인스턴스를 인쇄하고 함수 내에서 self를 인쇄하면 동일한 객체 (다른 메모리 주소)가 아닙니다. 나는 이것을 꽤 혼란스럽게 느낀다. 사전에서 함수의 인스턴스를 만들고 수정합니다. 그러나 실행될 때 같은 객체가 아닙니다. – taylormade201
임의 함수의 본문 내에서'self'는 현재 실행중인 함수를 참조하지 않습니다. 'self'는 클래스 메소드의 첫번째 인자로 명시 적으로 주어질 때 정의됩니다; 그것은 키워드가 아닙니다. 예 : http://stackoverflow.com/a/2709832/4091874 및 https://docs.python.org/2/tutorial/classes.html#random-remarks. – caseygrun
내 의견으로는, 함수를 바인딩하는 데코레이터를 썼습니다 : def bind (func) : return func .__ get __ (func, type (func))' – taylormade201