在 Python 中获取对象的完全限定类名 [英] Get fully qualified class name of an object in Python
问题描述
出于记录目的,我想检索 Python 对象的完全限定类名.(完全限定是指类名,包括包和模块名.)
For logging purposes I want to retrieve the fully qualified class name of a Python object. (With fully qualified I mean the class name including the package and module name.)
我知道x.__class__.__name__
,但是有没有简单的方法来获取包和模块?
I know about x.__class__.__name__
, but is there a simple method to get the package and module?
推荐答案
用下面的程序
#!/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
:
If you're still stuck on Python 2, you'll have to use __name__
instead of __qualname__
, which is less informative for nested classes - a class Bar
nested in a class Foo
will show up as Bar
instead of 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__
这篇关于在 Python 中获取对象的完全限定类名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!