我想制作一个 init 方法,可以理解这些助手。
candy(name="foo", type="bar")
or pass into a whole dict
candy({"name":"foo" , "type":"bar"})
class candy:
def __init__ ?????
如何使 init 方法适应两种构造函数?
感谢您的帮助
答案 0 :(得分:5)
您可以正常定义 init ,例如:
class candy(object):
def __init__(self, name, type):
self.name = name
self.type = type
然后以两种方式传递参数:
candy(name='name', type='type')
或
candy(**{ 'name': 'name', 'type': 'type' })
答案 1 :(得分:3)
http://docs.python.org/tutorial/controlflow.html#arbitrary-argument-lists
以及紧接其前面的部分,
http://docs.python.org/tutorial/controlflow.html#keyword-arguments
在您的特定情况下,它可能看起来像这样:
def __init__(*args, **kwargs):
if args:
d = args[0]
self.name = d['name']
self.type = d['type']
else:
self.name = kwargs['name']
self.type = kwargs['type']