Предположим, у меня есть два класса...
class A:
def __init__(self, *args, arg1="default1", arg2="default2"):
# Initialise class A
class B:
def __init__(self, arg3="default3", arg4="default4"):
# Initialise class B
У каждого класса есть свои аргументы ключевого слова, а у одного есть позиционные аргументы.
Теперь предположим, что есть функция, которая создает экземпляр каждого из этих классов, используя для этого свои собственные аргументы:
def make_objs(*args, arg1="default1", arg2="default2", arg3="default3", arg4="default4"):
objA = ClassA(*args, arg1=arg1, arg2=arg2)
objB = ClassB(arg3=arg3, arg4=arg4)
Здесь я вручную распределяю аргументы ключевого слова, которые функция получила, к правильному классу. Хотя это немного утомительно — мне приходится дублировать ключевые слова в определении функции, а изменение классов будет означать изменение аргументов функции.
В идеале я бы сделал что-то вроде этого:
def make_objs(*args, **kwargs):
objA = ClassA(*args, **kwargs)
objB = ClassB(**kwargs)
Где каждый класс будет принимать все аргументы ключевого слова и извлекать только те, которые относятся к нему. Это, конечно, не то, что приведенный выше код на самом деле сделал бы, он выдаст исключение, потому что ClassA
не ожидает аргумента с именем arg3
.
Есть какой-либо способ сделать это? Какой-то способ заставить функцию принимать **kwargs
в качестве аргумента и определять, какие аргументы могут относиться к какому классу?
constructor
вclass A
добавить*arg
и**kwarg
послеarg1
иarg2
? То же самое касаетсяclass B
. - person kiran.koduru   schedule 05.01.2017*args
вclassA
? Не могли бы вы дать полное определение вашегоconstructor
дляclassA
? - person kiran.koduru   schedule 05.01.2017