1. ホーム
  2. python

[解決済み] Pythonでオブジェクトの完全修飾クラス名を取得する

2022-04-23 02:48:50

質問

ロギングのために、Pythonオブジェクトの完全修飾クラス名を取得したいのですが、どうすればよいですか?(完全修飾とは、パッケージ名とモジュール名を含むクラス名を意味します)。

について知っています。 x.__class__.__name__ しかし、パッケージとモジュールを取得する簡単な方法はありますか?

どのように解決するのですか?

以下のプログラムで

#!/usr/bin/env python

import foo

def fullname(o):
    klass = o.__class__
    module = klass.__module__
    if module == 'builtins':
        return klass.__qualname__ # avoid outputs like 'builtins.str'
    return module + '.' + klass.__qualname__

bar = foo.Bar()
print(fullname(bar))

Bar として定義されています。

class Bar(object):
  def __init__(self, v=42):
    self.val = v

の場合、出力は

$ ./prog.py
foo.Bar

もしまだPython 2で行き詰っているのであれば __name__ の代わりに __qualname__ これはネストされたクラスにはあまり意味のないことです。 Bar の中にあるクラス Foo として表示されます。 Bar ではなく Foo.Bar :

def fullname(o):
    klass = o.__class__
    module = klass.__module__
    if module == '__builtin__':
        return klass.__name__ # avoid outputs like '__builtin__.str'
    return module + '.' + klass.__name__