Вся суть вопроса в названии.
Скажем, у меня есть следующий код:
class SomeClass:
def __init__(self, param1, param2=None):
self.param1 = param1
self.param2 = param2
и есть функция, которая должна принимать в аргументы все то же, что перечислено в методе __init__.
Вот моя попытка реализовать это:
def some_func(hello):
print(hello)
print(param1) # NameError
def edit_sig():
old_signature = signature(some_func)
constructor_arguments = signature(SomeClass).parameters.values()
res = [*old_signature.parameters.values(), *constructor_arguments]
some_func.__signature__ = old_signature.replace(parameters=res)
edit_sig()
some_func(hello=20, param1='lol')
Я понимаю, что в ошибке NameError нет ничего удивительного, я просто не знаю как поступить
И желательно, чтобы была возможность у решения потом удобным образом инициализировать этот самый класс.
Я делаю это с той целью, чтобы не перечислять все те аргументы, которые принимает конструктор. Это удобно тогда, когда конструктор будет переписываться и будут добавляться новые аргументы.