出于记录目的,我想检索 Python 对象的完全限定类名。(完全限定的意思是类名,包括包名和模块名。)
我知道x.__class__.__name__,但是有没有简单的方法来获取包和模块?
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定义为
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:
__name__
__qualname__
Foo
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__