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

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

有什么想法吗?

【问题讨论】:

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

标签: python


【解决方案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__
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 2011-11-17
    • 2020-06-24
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    相关资源
    最近更新 更多