Честно говоря, ваш вопрос не имеет большого смысла, и вот почему:
В момент, когда определено foo
, между двумя глобалами, называемымиsay_foo
и talk
и двумя функциями, импортированными вверху вашего кода.
Например, переводчик не будет жаловаться на следующее:
class foo(object):
def say_foo(self):
method1()
def talk(self):
method2()
Несмотря на отсутствиеимпорта, это все еще действительный код.Вы, конечно, не сможете звонить say_foo
и talk
, не получив NameError
.
Следующее также хорошо:
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()
Я оставляю вамвыясните, какой method1
вызывается, когда.
Теперь, сказав все это, есть кое-что, что вы можете сделать.Если вы изучите co_names
объекта метода, вы получите список имен, которые используются методом :
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.