2017-01-24 6 views
-1

あるファイルから別のファイルのクラスに文字列を使って変数にアクセスしたい。他のスコープの文字列を使って変数にアクセスする方法は?

ここに私のコードです。

ファイルa.py

aa = 12 
m = test('aa') 

ファイルclass.py

class test: 
    def __init__(self,string): 
     try: 
      self.variable = globals()[string] 
     except KeyError: 
      print('there is no variable named ' + string) 

test.py上記のコードは、配列、文​​字列 'blrblrという名前の変数が存在しない' を返します。私は、Pythonがレキシカルスコープを持っていれば、test()クラスが最初に呼び出されるスコープは'aa'と同じスコープでなければならないと思います。これをどうすれば解決できますか?

+0

'' globals'では 'class.py'が検索すると思いますか?これは、基本的には 'globals()'(または 'locals()'など)を実稼働コードで見ることはありません。あなたはほぼ確実に[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)を持っています。 – TigerhawkT3

+0

'class test'のレキシカルスコープは' a.py'ではなく 'class.py'ですので、' a.py'の変数は見えません。 – tdelaney

+0

オフトピック:「class」はPythonキーワードなので、 'import class'を実行することができないため、モジュールに' class.py'をインポートする名前を付けたいとは思わないでしょう。 – martineau

答えて

1

globals()は、現在のモジュールの属性の辞書を返します。別のファイルのコードにアクセスする通常の方法はimportです。例

import a 

について今、あなたは、コード内で直接a.pyから変数にアクセスすることができます

print(a.aa) 

それを行うための方法があるが、変数名などの文字列を使用しようとすることはお勧めできません。代わりに、辞書などのデータ構造を使用する必要があります。

関連する問題