1
timonwong 2013-07-08 16:10:20 +08:00 1
# 非要如此的话:
class Model(object): def __init__(self, *args, **kwargs): if args: assert len(args) == 1 assert isinstance(args[0], dict) self._init_models(args[0]) else: self._init_models(kwargs) def _init_models(self, model_dict): # YOUR LOGIC pass |
3
binux 2013-07-08 16:18:26 +08:00 1
这是应该你自己判断的
如果调用Model(form={a:1}),你的意思是调用__init__(self,form)呢,还是调用__init__(self,**values) ? |
4
banxi1988 OP |
5
Xe0n0 2013-07-08 17:26:37 +08:00 1
重新写个 dict_to_model 不就可以了,比如类方法。构造函数一般是为了处理构造时必须要初始化的东西,比如 C++ 中分配内存,子对象之类。这部分任务在 Python 中相对较少。
C++ 中的那种重载后变成实际上调用不同函数的行为在 Python 是不存在的。一部分原因是没有静态类型,一部分用简单的默认参数和 args, kwargs 就可以解决。楼上说的也就是手动实现了一遍类型检查而已。 完全不需要生硬寻找相同的实现方式。 |
6
banxi1988 OP |
7
banxi1988 OP @timonwong
突然想起来,Python中的dict就有类似的构造器。 dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d = {} for k, v in iterable: d[k] = v dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2) @Xe0n0 感觉使用默认的构造方法如dict中使用的,感觉更自然点呢? |