🐍

変数や関数の接頭語にアンダーバー('_')を付ける

2023/06/10に公開

Pythonでは、変数や関数の名前の前にアンダーバー(_)をつけることで特別な意味を持たせることがあります。それぞれのケースについて説明します。

  1. 単一のアンダーバー(_)を接頭辞として使用する場合
    この慣例は、変数やメソッドが内部的に使われる(プライベート)ことを示します。つまり、この変数やメソッドはそのモジュールやクラスの内部でのみ使用され、外部からは直接アクセスすべきではないことを示しています。ただし、Pythonでは実際のアクセス制御(privateのような)はないため、これはあくまで慣例であり、強制されるわけではありません。

    def _private_function():
        pass
    
    class MyClass:
        def _internal_method(self):
            pass
    
  2. アンダーバー(_)を接尾辞として使用する場合
    この慣例は、組み込みのPythonキーワードとの名前の衝突を避けるために使われます。例えば、classdefなどのPythonの予約語を変数名として使いたい場合などに使用します。

    class_ = MyClass()
    
  3. 二重のアンダーバー(__)を接頭辞として使用する場合
    この慣例は、メソッドや属性がクラスの内部でのみ使用されること、特にサブクラスでのオーバーライドを避けるために使われます(名前のマングリング)。ただし、これも完全なアクセス制限ではなく、特定のパターンを使ってアクセスすることは可能です。

    class MyClass:
        def __private_method(self):
            pass
    
  4. 二重のアンダーバー(__)を接頭辞および接尾辞として使用する場合
    これらの名前は、Pythonの特殊メソッドや属性(通常はマジックメソッドやデュンダーメソッドと呼ばれます)を指定するために使われます。これらのメソッドは、特定の構文(演算子オーバーロードなど)に対応したり、特定の関数(len()など)に対応したりするために使用されます。

    class MyClass:
        def __init__(self):
            pass

        def __len__(self):
            return 

※マジックメソッドとは:https://blog.codecamp.jp/python-class-code

Discussion