如果我从中执行此操作的函数是实例的类派生的基类,我如何找到在Python中创建对象实例的类的名称?
想到也许the inspect module可能在这里帮助了我,但它似乎没有给我我想要的东西 . 如果没有解析 __class__
成员,我不知道如何获取这些信息 .
如果我从中执行此操作的函数是实例的类派生的基类,我如何找到在Python中创建对象实例的类的名称?
想到也许the inspect module可能在这里帮助了我,但它似乎没有给我我想要的东西 . 如果没有解析 __class__
成员,我不知道如何获取这些信息 .
8 回答
您是否尝试过该类的
__name__
属性?即type(x).__name__
将为您提供课程的名称,我认为这就是您想要的 .此方法仅适用于new-style classes . 您的代码可能会使用一些旧式类 . 以下适用于:
type()?
例:
或者你可以使用
classmethod
装饰器:Usage :
上面的示例代码(在交互式解释器中输入时)将生成
'__main__.A'
而不是'A'
,如果调用了__name__
属性,则生成'A'
. 只需将A.__class__
的结果传递给str
构造函数,即可为您处理解析 . 但是,如果您想要更明确的内容,也可以使用以下代码 .如果您在单独的模块中定义了具有相同名称的类,则此行为更可取 .
The sample code provided above was tested in Python 2.7.5.
除了获取特殊的name属性之外,您可能会发现自己需要qualified name来获取给定的类/函数 . 这是通过获取类型
__qualname__
来完成的 .在大多数情况下,这些都是完全相同的,但是,当处理嵌套类/方法时,它们的输出会有所不同 . 例如:
由于内省是你所追求的,所以你可能总是想要考虑 .
你想把类的名字作为字符串吗?
好问题 .
这是一个基于GHZ的简单示例,它可以帮助某些人: