ホームページ >バックエンド開発 >Python チュートリアル >Python - クラス内でパブリック変数、プライベート変数、プロテクト変数を定義する方法

Python - クラス内でパブリック変数、プライベート変数、プロテクト変数を定義する方法

WBOY
WBOYオリジナル
2024-09-12 10:22:19953ブラウズ

Python -How to define public, private and protected variables in a class

導入

Python はオブジェクト指向プログラミング言語として、クラス内にデータをカプセル化するさまざまな方法を提供します。
このカプセル化の重要な側面の 1 つは、パブリック、プロテクト、プライベートに分類できるクラス変数の可視性です。この記事では、Python クラスでパブリック、プライベート、およびプロテクト変数を定義する方法を説明します。

これらの変数の動作は他のプログラミング言語とは異なり静かです。これらのアクセス制御は、実際のオブジェクトの非表示ではなく、単なる Python の命名規則です。

1. パブリック変数

パブリック変数は、最もアクセスしやすいタイプの変数です。クラスの内外を問わず、どこからでもアクセスできます。 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 はパブリック変数です。クラスの外部から制限なくアクセスして変更できます。

2. 保護された変数

保護された変数は、クラスとそのサブクラス内でのみアクセスされることを目的としています。 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 ではクラス外から直接アクセスすることを妨げませんが、そうすることは意図された使用法に反します。

3. プライベート変数

プライベート変数は、それを定義するクラス内でのみアクセスすることを目的としています。 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

このコード行は、クラス名を含むようにプライベート変数の名前が内部的に変更され、アクセスしにくくなる方法を示しています。

まとめ

  • パブリック変数: どこからでもアクセス可能。アンダースコアは使用できません。
  • 保護された変数: クラスとそのサブクラス内でアクセス可能。先頭に 1 つのアンダースコア (_) が付きます。
  • プライベート変数: クラス内でのみアクセス可能。先頭に二重アンダースコア (__) が付きます。

Python のアクセス制御は厳密な強制ではなく命名規則に基づいていますが、これらの規則に従うことはコードの明確さと整合性を維持するのに役立ちます。 Python で効果的なオブジェクト指向プログラミングを行うには、パブリック変数、プロテクト変数、プライベート変数の定義方法と使用方法を理解することが重要です。

以上がPython - クラス内でパブリック変数、プライベート変数、プロテクト変数を定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。