<分区>
假设我们有一个未知类型的任意对象,我们想要访问与该对象关联的同样任意的属性,以字符串名称的形式进行查询。我正在寻找获得此值的最佳实践方法。
在伪代码/Python 中,我正在考虑的当前策略是这样的:
def access_attribute(obj, attr):
if type(obj) == types.FunctionType:
return access_attribute(obj(), attr)
elif type(obj) == types.DictType:
return obj.get(attr)
# ... etc.
需要考虑的几个项目:
- 如果对象上不存在该属性会怎样?我可以提出异常(exception)。
- 该属性可能嵌套很深。
我认为这是编程语言和 DSL 解释器必须解决的问题,但我不知道标准/普遍接受的最佳实践。
在运行时将自定义存储的 DSL/代码与对象一起传递给 eval
的想法已经被提出,但我现在想避免这种特殊的解决方案,而更喜欢 Pythonic 的解决方案。