2014-06-06 4 views
0

Мне интересно, есть ли еще какой-нибудь пифонический вызов в func_wrap, без изменения func или func_wrap заголовка, вызвать функцию func?Python ** obj .__ dict__ equilavent command

class Foo(object): 
    a = 1 
    b = 2 

class Bar(object): 
    c = 3 

def func_wrap(foo_obj, bar_obj): 
    return func(a=foo_obj.a, b=foo_obj.b, c=bar_obj.c) 

def func(a, b, c): 
    return a + b + c 

Что-то больше вдоль линий:

def func_wrap(foo_obj, bar_obj): 
    return func(**foo_obj.__dict__ , **bar_obj.__dict__) 

ответ

1

Вы можете использовать vars function:

def func_wrap(foo_obj): 
    return func(**vars(foo_obj)) 

, которая сводится к тому же.

+0

Можно ли передавать несколько варов, если у меня есть больше параметров, которые поступают из нескольких объектов? (отредактированный вопрос соответственно) –

+1

@MattStokes: вы можете использовать 'func (** dict (vars (ob1), ** vars (ob2)))' для объединения двух объектов, для нескольких объектов требуется цикл, в котором вы обновляете один словарь со всеми options, * then * передать этот словарь на функцию. –

Смежные вопросы