2014-10-01 2 views
1

사전에 함수를 가져온 다음 해당 함수에 객체 속성을 추가하는 코드 조각이 있습니다. 그러나 아마도 네임 스페이스로 인해 함수 내에서 액세스하는 데 문제가 있습니다. 내가 함수 속성을 표시하지 않습니다 내에서 내가 볼 수있는 속성, 그러나 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 

답변

1

그것은 보이지 않는다; Is there a generic way for a function to reference itself?Python code to get current function into a variable?을 참조하십시오. 모든 함수가 def을 사용하여 이름으로 정의 된 경우 함수 본문에서 해당 속성을 가져 오기 위해 함수를 해당 이름 (예 : aFunction)으로 참조 할 수 있습니다.

더 큰 문제는 원하는 효과가 없을 수 있습니다 ... 함수가 파이썬에서 참조로 전달되므로 aFunctiondict에 여러 번 나타나면 여전히 함수 객체의 복사본이 하나만있을 것입니다. . 따라서 dict의 여러 값에 속성을 설정하면 모두 동일한 함수를 가리키고 속성의 마지막 값 만 저장하게됩니다 ... 자세한 내용 없이는 알기가 어렵습니다. 필요한 것.

아마도 가장 적절한 대답은 관련 값이 인수로 전달되도록 코드를 다시 작성하는 것입니다.

+0

일반적으로 런타임에 함수 참조에 특성을 추가 할 수있는 것처럼 보이지 않습니다 (즉, 함수 정의에 적용된 데코레이터 외부). 속성을 할당 한 후 함수 인스턴스를 인쇄하고 함수 내에서 self를 인쇄하면 동일한 객체 (다른 메모리 주소)가 아닙니다. 나는 이것을 꽤 혼란스럽게 느낀다. 사전에서 함수의 인스턴스를 만들고 수정합니다. 그러나 실행될 때 같은 객체가 아닙니다. – taylormade201

+0

임의 함수의 본문 내에서'self'는 현재 실행중인 함수를 참조하지 않습니다. 'self'는 클래스 메소드의 첫번째 인자로 명시 적으로 주어질 때 정의됩니다; 그것은 키워드가 아닙니다. 예 : http://stackoverflow.com/a/2709832/4091874 및 https://docs.python.org/2/tutorial/classes.html#random-remarks. – caseygrun

+0

내 의견으로는, 함수를 바인딩하는 데코레이터를 썼습니다 : def bind (func) : return func .__ get __ (func, type (func))' – taylormade201

관련 문제