在 Python 中获取对象的完全限定类名 [英] Get fully qualified class name of an object in Python

查看:63
本文介绍了在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆