Pythonでは、クラスや関数の完全修飾名を取得するために __qualname__ 属性を使用します。トップレベルの関数とクラスについては、__qualname__ 属性は __name__ 属性と同じです。しかし、ネストされたクラス、メソッド、ネストされた関数については、__qualname__ 属性はモジュールのトップレベルからオブジェクトへのドット区切りのパスを含みます。

例えば、次のようなネストされたクラスがあるとします。

class C:
    def f(): pass
    class D:
        def g(): pass

この場合、それぞれの __qualname__ 属性は以下のようになります。

print(C.__qualname__)  # 'C'
print(C.f.__qualname__)  # 'C.f'
print(C.D.__qualname__)  # 'C.D'
print(C.D.g.__qualname__)  # 'C.D.g'

また、ネストされた関数についても同様に __qualname__ 属性を使用できます。

def f():
    def g(): pass
    return g

print(f.__qualname__)  # 'f'
print(f().__qualname__)  # 'f.<locals>.g'

ただし、関数のローカル名前空間は <locals> というコンポーネントで表され、プログラム的には辿ることができません。しかし、人間の読者にとっては、単なる __name__ よりも有用な情報を提供します。

以上がPythonでのクラスの完全修飾名についての基本的な説明です。これらの知識を活用して、Pythonのコードをより理解しやすく、効率的に書くことができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です