[Питон] Метод класса с переменным числом аргументов.
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
О, спасибо большое. Работает!
Всю голову себе сломал.
lili197602
Хочу чтобы при инициализации класса вызывалась функция, задваемая на стадии выполнения скрипта. Эта функция может иметь разное количество аргументов.Пытаюсь делать так:
На выходе получаю:
То есть, в случае одного аргумента, все сработало. Для двух - пишет что ошибка.
С двумя аргументами, у меня пока, получилось только такое:
На выходе все хорошо:
Расскажите пожалуйста, в чем дело. Почему первый вариант не работает, и как можно запихнуть вызов внешней функции с переменным числом аргументов в инициализацию класса.
Спасибо.