我很好奇在检查 python 中的变量是否为字典时是否存在任何明显的问题?我意识到在 python 中进行类型检查不是很“pythonic”,但我不确定如何解决我的特定问题。
这是一个示例,我正在尝试根据 a.) 对象属性是否存在以及 b.) 如果我要覆盖的值是字典来设置对象的属性。如果它是一个字典,递归函数来设置那些子对象属性。
import six
class OtherObj(object):
def __init__(self, name):
self.name = name
class ExObj(object):
def __init__(self, name, description, other_obj):
self.name = name
self.description = description
self.other_obj = other_obj
def process_dict(obj, **kwargs):
for key, value in six.iteritems(kwargs):
if hasattr(obj, key):
if isinstance(value, dict):
process_dict(getattr(obj, key), **value)
else:
setattr(obj, key, value)
obj = ExObj("my name", "my desc", OtherObj("another name"))
process_dict(obj, **{ "name": "no this is my real name",
"description": "no this is my real desc",
"other_obj": { "name": "other object real name" } })
最佳答案
好吧,没有明显的问题,但如果你坚持:
- 他们通常说请求宽恕比请求许可更好。也许只是试图通过
[]
访问它,捕获可能的异常更 Pythonic,但我个人不这么认为。 但我要做的是使用抽象基类:
import collections isinstance(obj, collections.Mapping)
通过这种方式,该函数可以支持其他可能的映射类型,而不仅仅是
dict
。
关于Python:检查变量是否是字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412523/