잔인하게 정직하게하려면, 당신의 질문은 많은 이해하고, 여기에하지 않는 이유 :
foo
이
say_foo
에 의해 호출 된 두 개의 전역 사이에 어떤 연결이되지 않습니다 정의 된 시점에서
및 talk
및 코드 상단에 두 가지 함수를 가져 왔습니다.
예를 들어, 인터프리터는 다음에 대해 불평하지 않습니다 수입의 부재에도 불구하고
class foo(object):
def say_foo(self):
method1()
def talk(self):
method2()
이 여전히 유효한 코드입니다. 당연히 NameError
을 얻지 않고 say_foo
및 talk
으로 전화 할 수는 없습니다.
다음
도 괜찮 : 나는 때 호출됩니다있는
method1
파악하는 당신에게 떠날
from module1 import method1
from module2 import method2
class foo(object):
def say_foo(self):
method1()
def talk(self):
method2()
obj1 = foo()
obj1.say_foo()
def method1(): pass
obj1.say_foo()
obj2 = foo()
obj2.say_foo()
.
이제 모든 것을 말하면서, 당신은 수 있습니다합니까. 당신이 방법은 객체의 co_names
, 즉 당신에게 list of names that are used by the method을주지 살펴보면 :
In [30]: foo.say_foo.im_func.func_code.co_names
Out[30]: ('method1',)
In [31]: foo.talk.im_func.func_code.co_names
Out[31]: ('method2',)
을이 명확하게 정확하게을 요구하는지와 동일하지 않고, 또는에 따라 유용하지 않을 수도 있습니다 무엇을 당신은이 일을하고자합니다.
CPython과 관련이 있습니다.
출처
2011-08-03 13:47:03
NPE
say_foo'의 코드()'단지 전역 이름에 대한 참조를 포함합니다'method1', 'say_foo()'를 실행하는 동안 실행시이 전역 이름이 가리키는 객체로 이름이 결정됩니다. 이는'method1'이'say_foo()'를 정의 할 때 가리킨 것과는 완전히 다른 객체 일 수 있습니다. (또한, from module1 import method1의 명칭은 의미가 없습니다. 파이썬의 모듈 수준에는 "메소드"가 없습니다.) –
@Sven, 저는 shld가 메소드가 아니라 함수라고 말 했나요?! – user739807
예, 파이썬으로 호출하는 방법입니다.하지만이 설명은 단지 부수적 인 내용이었습니다.나의 요점은 당신이하려고하는 것이별로 의미가 없다는 것입니다. –