一般来说这不是问题。
Python有魔法的*args和**kwargs。
我的问题来自于,
我有一些Model类。
有时候它需要使用dict来创建。如从request.form之类。
有时候自己手动写参数创建。
当从request.form创建的时候,
我希望构造函数是这样的:
(1)使用字典作为参数
def __init__(self,form):
if not isinstance(form,dict):
continue
pass
但是当我自己手动传参数时,我希望它是这样的:
(2)使用关键词参数。
def __init__(self,**values):
pass
在我没有找到好的解决方法之前:
我是使用第二种形式的。如果是处理form的话我就
Model(**form.to_dict())
这个**这种魔法看起来不是很好,折包又打包(指实参数的**kw和形参的**kw)
而且像我一般都有一个ModelMixin来处理
从dict到model对象赋值的通用方法:
def _init_inner(self, **params):
if not isinstance(params, dict):
return
for col in self.__table__.columns:
name =
col.name # 不设置键值,和密码(要做特别的处理)
if name in ('id', 'password',) or '_id' in name:
continue
value = params.get(name)
if value:
if isinstance(col.type, db.Integer):
value = int(value)
elif isinstance(col.type, db.Boolean):
value = bool(value)
setattr(self, name, value)
这样的话,
__init__()
里面还需要再一次的
self._init_inner(**kw)
这样经过多次的打包折包我觉得需要改改了。
求指导。
大家的model实例化是怎么做的呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/75139
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.