访问不可订阅的属性
Accessing non-subscriptable properties
为 Blender 编写脚本,我成功地完成了 bpy.ops.render.render(some_args)
但 bpy.ops.render['render']
失败,BPyOpsSubMod 对象不可订阅。这让我感到困惑,因为我预计,同样在 Javascript 中,任何 Python 对象都是一个字典,我可以通过 obj.member
或 obj['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)
为 Blender 编写脚本,我成功地完成了 bpy.ops.render.render(some_args)
但 bpy.ops.render['render']
失败,BPyOpsSubMod 对象不可订阅。这让我感到困惑,因为我预计,同样在 Javascript 中,任何 Python 对象都是一个字典,我可以通过 obj.member
或 obj['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)