假设我们有一个未知类型的任意对象,我们希望访问与此对象关联的同等任意属性,查询为字符串名称。我正在寻找获得这个价值的最佳实践方法。
在伪代码/ 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.
要考虑的几个项目:
我认为这是编程语言和DSL解释器必须解决的问题,但我不知道标准/普遍接受的最佳实践。
在运行时将自定义存储的DSL /代码传递给eval
的想法已经被提出,但我想暂时避免使用这种特殊的解决方案而更喜欢Pythonic的解决方案。
答案 0 :(得分:-1)
getattr(object, name[, default])
似乎至少回答了你问题的前半部分和这一点:
如果对象上不存在该属性会发生什么?我可以提出异常。
我认为这是一种最佳实践,因为它是标准库的一部分。
关于你的第二点:
该属性可能是深层嵌套的。
解决方案是使用dir(object)
(将列出对象的所有属性)并循环使用非dict对象,但我对“最佳实践”方面的信心不足这个解决方案。