问题描述
我目前正在使用 3D 软件 (blender 3d) 的 API 在这里我们可以创建一个名为“VertexGroup”的子类(主要用于存储顶点权重信息)。
我正在我的 python 脚本中为这些类实例添加功能,用户可以在其中通过一些数学算法生成程序顶点组。唯一的问题是我无法正确识别实例。在目前的情况下,我的脚本依赖于用户可以访问的内置“名称”字符串属性。这意味着如果用户更改此属性,我将失去对实例的跟踪。
所以我的问题如下,如何识别此类的实例?有什么方法可以“标记”班级以便以后识别?
以下是我尝试过但没有成功的几件事:
- 不幸的是,使用此类中的另一个 attr,我无法将其用于识别目的。
- 通过 API 中提供的内置属性管理将我自己的属性添加到该类中,不幸的是,此特定情况不支持自定义属性,因此我需要找到一种更 Pythonic 的方式。
- 向类添加新属性,不幸的是该类没有任何
__dict__
方法,它只有__doc__
__module__
__slots__
并且都是只读的。 - 使用 id() 或 hash() 是我需要的,对吗?不幸的是,在这种情况下它不起作用,因为软件会在内存中动态地重新分配此对象,因此这些标识符可能会在对象生命周期内发生变化。
- 创建 VertexGroup 的子类,不幸的是,它不受软件 API 支持。
解决方法
获取对象的类 obj
:
type(obj)
要检查对象 obj
是否与类 cls
兼容:
isinstance(obj,cls)