小编典典

在 Python 中获取对象的完全限定类名

all

出于记录目的,我想检索 Python 对象的完全限定类名。(完全限定的意思是类名,包括包名和模块名。)

我知道x.__class__.__name__,但是有没有简单的方法来获取包和模块?


阅读 68

收藏
2022-08-20

共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

如果您仍然停留在 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__
2022-08-20