Python はオブジェクト指向プログラミング言語として、クラス内にデータをカプセル化するさまざまな方法を提供します。
このカプセル化の重要な側面の 1 つは、パブリック、プロテクト、プライベートに分類できるクラス変数の可視性です。この記事では、Python クラスでパブリック、プライベート、およびプロテクト変数を定義する方法を説明します。
これらの変数の動作は他のプログラミング言語とは異なり静かです。これらのアクセス制御は、実際のオブジェクトの非表示ではなく、単なる Python の命名規則です。
パブリック変数は、最もアクセスしやすいタイプの変数です。クラスの内外を問わず、どこからでもアクセスできます。 Python では、明示的に定義されていない限り、すべてのクラス変数はデフォルトでパブリックです。
例:
class MyClass: def __init__(self, name): self.name = name # Public variable obj = MyClass("John") print(obj.name) # Accessible outside the class #Output : John
この例では、name はパブリック変数です。クラスの外部から制限なくアクセスして変更できます。
保護された変数は、クラスとそのサブクラス内でのみアクセスされることを目的としています。 Python は厳密なアクセス制御を強制しませんが、変数が保護されていることを示す慣例として、名前の前に 1 つのアンダースコア (_) が付けられます。
例:
class MyClass: def __init__(self, name, age): self._age = age # Protected variable class ChildClass(MyClass): def display(self): print(f"Age: {self._age}") # Accessible within a subclass obj = ChildClass("John", 30) obj.display() # Output: Age: 30
この例では、年齢は保護された変数です。 Python ではクラス外から直接アクセスすることを妨げませんが、そうすることは意図された使用法に反します。
プライベート変数は、それを定義するクラス内でのみアクセスすることを目的としています。 Python では、変数名の前に二重アンダースコア (__) を付けることでプライベート変数を表します。これにより、名前のマングリングが引き起こされ、クラスの外部からプライベート変数にアクセスすることが困難になります (不可能ではありません)。
例:
class MyClass: def __init__(self, name, age, salary): self.__salary = salary # Private variable def display_salary(self): print(f"Salary: {self.__salary}") # Accessible within the class obj = MyClass("John", 30, 50000) obj.display_salary() # Output: Salary: 50000 # Trying to access the private variable outside the class print(obj.__salary) # Raises AttributeError
この例では、給与はプライベート変数です。クラスの外部から直接アクセスしようとすると、Python は AttributeError を発生させます。ただし、名前がマングルされたバージョンを使用してアクセスすることはできますが、これはお勧めできません。
名前のマングリングの例:
print(obj._MyClass__salary) # Output: 50000
このコード行は、クラス名を含むようにプライベート変数の名前が内部的に変更され、アクセスしにくくなる方法を示しています。
Python のアクセス制御は厳密な強制ではなく命名規則に基づいていますが、これらの規則に従うことはコードの明確さと整合性を維持するのに役立ちます。 Python で効果的なオブジェクト指向プログラミングを行うには、パブリック変数、プロテクト変数、プライベート変数の定義方法と使用方法を理解することが重要です。
以上がPython - クラス内でパブリック変数、プライベート変数、プロテクト変数を定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。