タイトルが誤解を招くか不正確かもしれないので、私が間違っていれば私を修正してください。モジュール間のPython変数スコープ
私はこのような構造のパッケージがあります。
common
__init__.py
foo.py
そして、ここでのコードは次のとおりです。
common/__init__.py
name = 'name_common'
def print_current_file_name():
print('current file name: ' + __file__)
def print_name():
print('name is: ' + eval('name'))
foo.py
from common import print_current_file_name, print_name
name = 'name_foo'
if __name__ == '__main__':
print_current_file_name()
print_name()
私はこれを行う場合:
>>> python foo.py
を、私はこの取得します:
current file name: /tmp/common/__init__.py
name is: name_common
をしかし、私は結果があることを期待:
current file name: /tmp/common/foo.py
name is: name_foo
私は何を逃したのですか?どうすればこの権利を行えますか? 私も
eval
の使用は奇妙です...キーワードは、私がグーグルべきか分かりませんが、これらのコードは、デモンストレーションのみを目的だけです。
私は同意するが、( 'class'を使用せずに)これを達成するためにどのような方法があります場合、私はちょうど思ったんだけど – amigcamel
動的スコープ言語(顕著な例はSchemeとシェルです)。 Pythonは静的スコープです。 – chepner