Python 中如何获取一个实例的类名?

获取实例类名的两种方式:type(obj).__name__ 或 obj.__class__.__name__,两者等价。如需完整限定名用 __qualname__ 或 __module__ + __name__。

最佳实践
Python 中如何获取一个实例的类名?封面

两种等价写法:type(obj).__name__obj.__class__.__name__,都返回类名字符串(如 'MyClass')。

基本用法

class MyClass:
    pass

obj = MyClass()

print(type(obj).__name__)        # MyClass
print(obj.__class__.__name__)    # MyClass

需要更多信息时

print(type(obj).__qualname__)   # 嵌套类/方法内类的限定名,如 'Outer.Inner'
print(type(obj).__module__)     # 类所在模块,如 'myapp.models'
print(f"{type(obj).__module__}.{type(obj).__qualname__}")  # 完整路径

典型用途:日志和序列化

在日志里自动记录类名,比手写字符串更不易出错:

import logging
logger = logging.getLogger(type(self).__name__)

这是 Python 项目里给每个类配独立 logger 的惯用法。

常见问题(FAQ)

Q:type(obj) 和 obj.class 有区别吗?
A:对普通对象结果一样。type() 是更常见的写法;__class__ 可以被对象覆写(如某些代理对象),所以严格来说 type() 更可靠。

Q:想要类本身而不是名字?
A:直接用 type(obj)obj.__class__,返回的是类对象,可以继续实例化:type(obj)()

Q:内置类型也能用吗?
A:能,type([]).__name__ 得到 'list'type('').__name__ 得到 'str'

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台