2

__init__で定義された変数がクラスからアクセスできないのはなぜですか? 外部からアクセスできるように、インスタンス化中に実行する必要がありますか?

>>> class a:
...     data = {}
... 
>>> a.data
{}
>>> class a:
...     def __init__(self):
...             self.data = {}
... 
>>> a.data
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class a has no attribute 'data'
4

2 に答える 2

12

で定義されている変数__init__インスタンス変数であり、定義上、クラス スコープからアクセスすることはできません。これが機能する理由です:

a().data # data is a member of an instance of class `a`

...これは機能しませんが:

a.data   # data is not a member of the `a` class

を呼び出して の新しいインスタンスを作成すると__init__(初期化子) が実行されることに注意してください。その時点から、 で定義されているすべての変数が の特定のインスタンスにバインドされます。aa()__init__a

于 2012-05-30T02:21:40.593 に答える
1

クラスはオブジェクトの設計図です。この__init__メソッドは各オブジェクトで実行され、その内容が設定されます。__init__「すべてのオブジェクトは属性aで始まる」という を作成しました。data

ここで、クラス自体dataを介してアクセスする必要があります。a

どのオブジェクトdataを受け取る予定ですか? なぜ?はdataクラス自体の一部ではありません。クラス自体は、ボールがボールの概念と異なるのと同じように、a特定のオブジェクトとは異なります。ボールは青くすることができます。ボールの概念はできません。a

于 2012-05-30T04:13:00.867 に答える