残酷に正直に言うと、あなたの質問には意味の全体の多くを作成し、ここに理由はありません。
foo
が定義されている時点では、何も接続はsay_foo
で呼ばれる2つのグローバル変数の間で行われていないとtalk
と2つの関数をコードの先頭にインポートします。例えば
、インタプリタは次のように文句はありません。
class foo(object):
def say_foo(self):
method1()
def talk(self):
method2()
輸入の不在にもかかわらず、これはまだ有効なコードです。あなたはもちろんとtalk
をNameError
なしで呼び出すことはできません。
次
も結構です:私は時に呼び出されるどの
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()'の実行中に、このグローバル名が実行時に指し示すオブジェクトに名前が解決されます。これは、 'say_foo()'の定義時に 'method1'が指しているものとは全く異なるオブジェクトかもしれません。 (さらに、 'from module1 import method1'の命名法はあまり意味がありません。Pythonのモジュールレベルには「メソッド」はありません。) –
@Sven、私はshldメソッドをメソッドよりも言っていますか? – user739807
はい、これはPythonで呼び出される方法ですが、このコメントは単なる副次的なものです。私の主なポイントは、あなたがしようとしていることはあまり意味がないということです。 –