2

私はこれを持っています:

class MyClass:
    """A simple example class"""
    i = 12345
    def f(self):
        print i                     # self.i will work just fine
        return 'hello world'

私がする時:

>>> x = MyClass()
>>> 
>>> x.f()

予想どおり、エラーが発生します。

私の質問は:

  1. なぜエラーが発生するのですか?

  2. 関数(またはメソッド)定義の名前空間とクラスを含むモジュールのグローバル名前空間の間に名前空間がないのはなぜですか?

  3. この場合、selfを使用する以外に、f内でiを参照する他の方法はありますか?

4

2 に答える 2

3
  1. print iグローバル(モジュール用)変数を出力しようとしているため、エラーが発生しましたi。クラスのメンバーを使用する場合は、を記述する必要がありますself.i
  2. GuidoVanRossumが名前空間を使用しないことに決めたからです。実はもう答え方がわかりません。
  3. はい、しかしいいえ。はい、「リフレクション」を使用して(Pythonでどのように呼び出されるか思い出せません)、クラスの任意のメンバーにアクセスできるためです。いいえ、使用することselfが唯一の使用可能な方法であるためです。
于 2013-01-12T23:26:54.087 に答える
0

なぜエラーが発生するのですか?

回答:これは、関数/メソッドコードを指す変数iとシンボル/レベルfがMyClass名前空間にあるのに対し、関数fの値/呼び出し可能コード/本体はグローバル名前空間にあるためです。

関数(またはメソッド)定義の名前空間とクラスを含むモジュールのグローバル名前空間の間に名前空間がないのはなぜですか?

回答:Pythonデザイナーが関数名/シンボルをクラスに配置することを決定したのに、その本体をグローバル名前空間に配置することにした理由はわかりません。

この場合、selfを使用する以外に、f内でiを参照する他の方法はありますか?

回答:私はそうは思いませんが、そうだとしても、ロジック/コードは簡単ではないかもしれません

于 2020-02-02T03:16:08.477 に答える