Pythonでオブジェクトの完全修飾クラス名を取得する 質問する

Pythonでオブジェクトの完全修飾クラス名を取得する 質問する

ログ記録の目的で、Python オブジェクトの完全修飾クラス名を取得したいと考えています。(完全修飾とは、パッケージ名とモジュール名を含むクラス名を意味します。)

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

ベストアンサー1

以下のプログラムでは

#!/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

__name__まだ Python 2 を使用している場合は、の代わりにを使用する必要がありますが、これはネストされたクラスに関する情報が少なく、クラス内にネストされた__qualname__クラスはの代わりにとして表示されます。BarFooBarFoo.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__

おすすめ記事