Python クラスの変数スコープ
スコープの変動
Python クラスでは、変数のスコープが異なります宣言されている場所に基づく:
-
クラスレベル変数 (外部関数): すべてのクラス関数 (パブリック変数) にアクセス可能。
-
関数ローカル変数 (クラス関数内): その特定の関数 (スコープ内) に制限されます。
自己変数とグローバル変数
クラス関数内でself.(変数名)で変数を宣言すると、すべてのクラス関数からアクセスできるようになります。ただし、グローバル変数とは異なり、これらの変数は現在のインスタンスに固有であり、クラスレベル変数をオーバーライドしません。
追加ニュアンス
-
単一vs. 二重アンダースコア接頭辞: 単一のアンダースコアで始まる変数 (例: _variable) は保護されているとみなされ、クラス内でのみアクセスする必要があります。二重アンダースコアで始まる変数 (__variable など) はマングルされ、事実上プライベートになります。
-
ローカル変数: クラス関数内で宣言された変数は、それらの関数に対してローカルであり、クラス スコープには影響しません。
例
次のクラスについて考えます。
class Test:
a = None
b = None
def __init__(self, a):
print(self.a)
self.a = a
self._x = 123
self.__y = 123
b = 'meow'
- a と b は、どのクラスからでもアクセスできるクラスレベル変数です。 instance.
- a は、__init__ のインスタンス固有の self.a によってオーバーライドされます。
- _x は保護されており、パブリック API の一部ではありません。
- __y はマングルされており、プライベートです
- b は、__init__ 内でのみアクセスできるローカル変数です。
以上が変数スコープは Python クラス内でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。