如何将具体的类名作为字符串获取? [复制]

Posted

技术标签:

【中文标题】如何将具体的类名作为字符串获取? [复制]【英文标题】:How to get the concrete class name as a string? [duplicate] 【发布时间】:2010-10-06 00:14:28 【问题描述】:

我想避免调用很多 isinstance() 函数,所以我正在寻找一种方法来获取实例变量的具体类名作为字符串。

有什么想法吗?

【问题讨论】:

这不是让我来到这里的问题的重复。我正在阅读 Python 3 的“具体对象层”文档。该文档描述了 C 级映射,其类型低于常规类名。因此,例如,文档描述了“PyLongObject”。我想知道如何在给定任意对象的情况下获取这个低级名称。 【参考方案1】:

你也可以创建一个字典,将类本身作为键,不一定是类名

typefunc=
    int:lambda x: x*2,
    str:lambda s:'(*(%s)*)'%s


def transform (param):
    print typefunc[type(param)](param)

transform (1)
>>> 2
transform ("hi")
>>> (*(hi)*)

这里的typefunc 是一个为每种类型映射一个函数的字典。 transform 获取该函数并将其应用于参数。

当然,使用“真正的”OOP 会好得多

【讨论】:

+1。对类对象本身的“is”测试将比字符串更快,并且不会因为两个不同的类称为同一事物而失败。 可悲的是,这在子类上是平淡无奇的,但 +1 暗示“真正的”OOP 和多态性。【参考方案2】:
<object>.__class__.__name__

【讨论】:

【参考方案3】:
 instance.__class__.__name__

示例:

>>> class A():
    pass
>>> a = A()
>>> a.__class__.__name__
'A'

【讨论】:

我更喜欢:type(instance).__name__ 如果你不想实例化类怎么办?你能得到班级的名字吗? (没有对象) 对于 A 类,使用以下代码:A.__name__ 有没有办法通过导入路径获取?例如,str(type(foo)) == "&lt;class 'never.gonna.give.youup'&gt;"type(foo).__name__ == "youup"。我如何获得never.gonna.give.youup 路径可以使用 type(foo).__module__

以上是关于如何将具体的类名作为字符串获取? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP:获取传递的变量的类名?

如何将参数作为字符串连接,中间有空格? [复制]

如何为类名组合字符串 + javascript? [复制]

获取视图控制器的类名称作为字符串NSStringFromClass

如何在 FreeMarker 中将字符串作为输入传递? [复制]

获取 django 模型的类名