Python: Как я могу сделать вызов __Init__ для двух разных методов аргумента? - PullRequest
3 голосов
/ 12 марта 2012

Я хочу создать init метод, который сможет понять этих контрагентов.

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

or pass into a whole dict

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

class candy:
    def __init__ ?????

Как я могу сделать метод init таким, чтобы он мог вместить оба конструктора ??

Спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 12 марта 2012

Вы можете определить 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' })
3 голосов
/ 12 марта 2012

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...