访问不可订阅的属性

Accessing non-subscriptable properties

为 Blender 编写脚本,我成功地完成了 bpy.ops.render.render(some_args)bpy.ops.render['render'] 失败,BPyOpsSubMod 对象不可订阅。这让我感到困惑,因为我预计,同样在 Javascript 中,任何 Python 对象都是一个字典,我可以通过 obj.memberobj['member'] 访问对象方法。当我想按名称引用它们时,如何解决不可订阅的属性?

并非每个对象 都是 字典。但大多数对象 都有 字典,可通过名称 .__dict__.

访问

您可以使用其中之一

bpy.ops.render.__dict__['render']

getattr(bpy.ops.render, 'render')

如果你想知道没有 dict 的 non-subscriptable 对象里面有什么,你可以这样做:

import csv # use csv dialect as example object
a = csv.get_dialect('excel')
field_names = [v for v in dir(a) if not v.startswith('__')]
fields = [(getattr(a, v),v) for v in field_names]

print(fields)