Пусть у меня есть два класса ...Как функция может принимать ** kwargs в качестве аргументов и распределять их между разными классами?
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' аргументов в' классе A' вы добавляете '* arg' и' ** kwarg' после 'arg1' и' arg2'? То же самое относится к классу B. –
Вопрос: Когда вы собираетесь распаковать '* args' в' classA'? Можете ли вы предоставить полное определение вашего 'constructor' для' classA'? –
Функция на самом деле: https://github.com/samirelanduk/quickplots/blob/2.0/quickplots/quick.py#L4 –