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のコードをより理解しやすく、効率的に書くことができます。