Python:如何使用两种不同的参数方法调用__Init__?

时间:2012-03-12 01:56:21

标签: python constructor

我想制作一个 init 方法,可以理解这些助手。

candy(name="foo", type="bar")

or pass into a whole dict

candy({"name":"foo" , "type":"bar"})

class candy:
    def __init__ ?????

如何使 init 方法适应两种构造函数?

感谢您的帮助

2 个答案:

答案 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']