Pythonでクラスのインスタンスを初期化するときに、クラス属性を使用できないのはなぜかと思います。ここでは一例です:クラスのインスタンスが表示される前にPythonのクラスとインスタンスの初期化
class TestClass:
... shared_list = ['a', 'b', 'c']
... def __init__(self):
... self.length = len(shared_list)
今
>>> TestClass.shared_list
['a', 'b', 'c']
ので、リストが存在するが、
>>> tc = TestClass()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
NameError: global name 'shared_list' is not defined
私は、単純な何かが足りないのですか?
UPD:皆様のおかげで、迅速な対応に感謝します。私は私の混乱を解消しました。クラスはPythonでスコープを定義していません。
スコープ付き 'shared_list'を使用する場合は、' self.shared_list'または 'TestClass.shared_list'が必要です。 – AChampion
@AChampion Thanks、TestClass.shared_listで修正しました。 C + +から来て、私はそれが混乱していることがわかります。*クラス内では、クラスへの明示的な参照が必要です。私は、インスタンス内に属性が見つからない場合、それがクラス内で検索され、グローバルに検索されるのではないと考えました。 – LazyCat
残念ながら、上記のスコープルールを参照してください。 – AChampion