【问题标题】:How to add "tag" to a python class instance for identification purpose?如何将“标签”添加到 python 类实例以进行识别?
【发布时间】:2021-06-24 06:11:09
【问题描述】:

我目前正在使用 3D 软件 (blender 3d) 的 API 我们可以在其中创建一个名为“VertexGroup”的子类(它基本上用于存储顶点权重信息)。

我在我的 python 脚本中为这些类实例添加功能,用户可以通过一些数学算法生成程序顶点组。唯一的问题是我无法正确识别实例。在目前的情况下,我的脚本依赖于用户可访问的内置“名称”字符串 attr。这意味着如果用户更改此属性,我将失去对实例的跟踪。

所以我的问题是,如何识别这个类的实例?有什么方法可以“标记”该类以便以后识别它吗?

以下是我已经尝试过但没有成功的几件事:

  • 不幸的是,我没有使用此类中的另一个 attr 来进行识别。
  • 通过 API 中提供的内置属性管理将我自己的属性添加到该类中,不幸的是,此特定情况不支持自定义属性,因此我需要找到一种更 Python 的方式。
  • 向类添加新属性,不幸的是该类没有任何__dict__方法它只有__doc____module____slots__并且都是只读的。
  • 使用 id() 或 hash() 是我需要的吗?不幸的是,在这种情况下它不起作用,因为软件会在内存中动态地重新分配这个对象,所以这些标识符可能会在对象生命周期内发生变化。
  • 创建 VertexGroup 的子类,遗憾的是,软件 API 不支持它。

【问题讨论】:

  • “我试过这个:”列表的最后几个项目符号没有正确显示。
  • 你有什么我可能会忽略的建议吗?
  • 如果你不能添加属性,或者属性可以由用户更改,并且id和内存位置是可变的,我也没有想法了。
  • 如何在你的类中实现 comparison 方法,例如 == 和 (如果有意义的话),它们分别是 __eq__、__lt__ 和 __gt__,与那些您的班级将可以根据您想要的任何标准进行比较和排序

标签: python class object uniqueidentifier identification


【解决方案1】:

获取对象的类obj:

type(obj)

检查对象obj是否与cls类兼容:

isinstance(obj, cls)

【讨论】:

  • 这将帮助我识别我的对象是否是我的类中的一个实例,我不需要这个,我需要一种识别实例的方法,将它保存为某种标识符以识别我的实例稍后(在这种情况下 id 和 hash 不起作用)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2012-07-20
相关资源
最近更新 更多