0

私は約 1 週間ほど Python を学習してきましたが、コードがかなり大きくなり、少し乱雑になった後、別のクラス ファイルなどに分割することにしましたが、ちょっとした問題に遭遇しました。

SO で Google を検索してみましたが、特定の問題が見つからなかったので、以前に尋ねられた場合はご容赦ください。

2 つのファイルを考えてみましょう。test.py と testClass.py test.py にグローバル変数があり、これは test.py でも SET になりますが、testClass.py の関数でその変数にアクセスしたいと考えています。説明に役立つコードを次に示します。

test.py は次のようになります。

import testClass

dict = {}
z = 5

dict['test'] = testClass.testClass(1, 3)

print dict['test'].sum()

testClass.py は次のようになります。

class testClass:
    def __init__(self, x, y):
        self.foo = x
        self.bar = y

    def sum(self):
        global z
        return self.foo + self.bar + z

現在、通訳者は吐き出しています:

NameError: global name 'z' is not defined

クラスと変数スコープのPythonリファレンスを読み直した後、私はそれを釘付けにしたと思いましたが、明らかにそうではありませんでした。

このすべての結果は、オブジェクト インスタンスのディクショナリを繰り返し処理し、外部クラス内に含まれる一連のさまざまなチェック関数などを実行できるようになることです。

4

3 に答える 3

1

Globalはファイル(モジュール)に対してグローバルであるため、クラスに含めることをお勧めします。

于 2012-12-27T21:01:47.520 に答える
0

技術的にはローカル名前空間であるため、メソッド内でグローバルを宣言した場合にグローバルが機能するかどうかはわかりません。メインと合計の外に置いてみてください。

于 2012-12-27T20:59:44.497 に答える
0

グローバルは、それ以外の場合はグローバルを変更する関数で定義する必要があります。

test.py でも「z」をグローバルとして定義する必要があると思います。

import testClass

dict = {}
global z = 5

dict['test'] = testClass.testClass(1, 3)

print dict['test'].sum()
于 2012-12-27T21:02:47.887 に答える