使用**
解包时,我需要与构造函数具有完全相同的参数?
我的意思是,如果我在字典中有一个额外的项目,应该被忽略,我需要弹出项目?目前我正在尝试解压一切,我希望该项目会立即被排除,但我收到此错误:
__init__() got an unexpected keyword argument
nagative = NegativeSentimentAnalysis(**negative_items)
class NegativeSentimentAnalysis(db.Model):
id = db.Column(db.Integer, primary_key=True)
sentiment = db.Column(db.String(500))
topic = db.Column(db.String(500))
def __init__(self, sentiment=None, topic=None):
self.sentiment = user_id
self.topic = topic
答案 0 :(得分:2)
您可以让__init__
接受所有关键字参数:
def __init__(self, sentiment=None, topic=None, **kw):
这将导致在kw
中收集剩余的参数,该方法可以忽略。但是,这有一个警告,您可能有其他代码构造此对象可能需要失败。
或者只是过滤掉其他答案中提到的参数。
答案 1 :(得分:0)
您可以使用相关键构造一个新的dict并使用:
keys = {'sentiment', 'topic'}
kwargs = {k:v for k,v in negative_items.iteritems() if k in keys}
negative = NegativeSentimentAnalysis(**kwargs)