[Питон] Метод класса с переменным числом аргументов.

lili197602

Хочу чтобы при инициализации класса вызывалась функция, задваемая на стадии выполнения скрипта. Эта функция может иметь разное количество аргументов.
Пытаюсь делать так:
 

def func1(self, a):
print "func1:", a

def func2(self, a, b):
print "func2:", a, b

class MyClass:
def __init__(self, *args):
print "MyClass init", args
self.func(args)

MyClass.func = func1
mc = MyClass(-1)

MyClass.func = func2
mc = MyClass(-1, -2)

На выходе получаю:
 

MyClass init (-1
func1: (-1
MyClass init (-1, -2)
Traceback (most recent call last):
File "<stdin>", line 53, in <module>
File "<stdin>", line 47, in __init__
TypeError: func2 takes exactly 3 arguments (2 given)

То есть, в случае одного аргумента, все сработало. Для двух - пишет что ошибка.
С двумя аргументами, у меня пока, получилось только такое:
 

def func2(self, a, b):
print "func2:", a, b

class MyClass:
pass

MyClass.func = func2
mc = MyClass
mc.func(-1, -2)

На выходе все хорошо:
 
func2: -1 -2  

Расскажите пожалуйста, в чем дело. Почему первый вариант не работает, и как можно запихнуть вызов внешней функции с переменным числом аргументов в инициализацию класса.
Спасибо.

doublemother

self.func(args)
self.func(*args)
Иначе ты передаёшь список одним аргументом.

lili197602

О, спасибо большое. Работает!
Всю голову себе сломал.
Оставить комментарий
Имя или ник:
Комментарий: