2016-04-26 57 views
0

我有一个类只需要kwargs。该参数kwargs['content']包含usertheme键:使用Python来映射键和数据类型在kwargs

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

我需要一个灵活的方式来建模是什么kwargs['content']和检查...

  • 一些关键在kwargs [“内容”]总是当下。
  • 始终确保值不为空并且与类型匹配。

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

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。

+0

'__init__'方法也在使用'* args'? – AKS

+0

'content'是一个'str'或者'dict'? –

+0

@CPanda内容不幸传入字符串! – Prometheus

回答

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 

因素了验证逻辑的方法,如果你认为合适的。评论它是否不起作用。

+0

好吧,这让我在正确的轨道上,部分功劳@JS为json.loads – Prometheus