使用Python在kwargs中映射键和数据类型

时间:2016-04-26 14:29:43

标签: python python-3.x

我有一个只占kwargs的课程。参数kwargs['content']包含usertheme键:

> content = "{'user': 1, 'theme':'red'}"
> kwargs['content'] = content
> m = Message(**kwargs)

我需要一种灵活的方式来模拟kwargs['content']中的内容并检查...

  • kwargs [' content']中的某些键始终存在。
  • 始终确保值不为null并且与类型匹配。

这是我尝试过的,但我觉得有更好的方法。

class Message(object):
    def __init__(self, *args, **kwargs):

        for field in self._hash_model():
            if field not in kwargs['content']:
                raise ValidationError('Missing % field'.format(field))
            # check type
            # turn to json



    def _hash_model(self):
        """
        My model of values that need to be in content
        """
        model = {
             'user': int,
             'theme': str
         }

        return model

我正在使用Python 3.4。

1 个答案:

答案 0 :(得分:1)

查看以下内容是否适合您。将__init__更改为

def __init__(self, *args, **kwargs):
    content = json.loads(kwargs["content"]) # assuming kwargs has "content" key
    for key,val in self._hash_model().items():
        field = content.get(key) # returns None if absent
        if field and typeof(field) is val:
            # go ahead
        else:
            raise SomeException

如果您认为合适,则将验证逻辑分解为方法。评论是否不起作用。