python构造器重载_目前不习惯Python不能重载构造函数的问题

一般来说这不是问题。

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实例化是怎么做的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值