ログ記録の目的で、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__
クラスはの代わりにとして表示されます。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__