如何将具体的类名作为字符串获取? [复制]
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)) == "<class 'never.gonna.give.youup'>"
但type(foo).__name__ == "youup"
。我如何获得never.gonna.give.youup
?
路径可以使用 type(foo).__module__以上是关于如何将具体的类名作为字符串获取? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
获取视图控制器的类名称作为字符串NSStringFromClass