@Mikkkch

Как в рантайме увеличить количество аргуметов функции?

Вся суть вопроса в названии.

Скажем, у меня есть следующий код:
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 нет ничего удивительного, я просто не знаю как поступить
И желательно, чтобы была возможность у решения потом удобным образом инициализировать этот самый класс.
Я делаю это с той целью, чтобы не перечислять все те аргументы, которые принимает конструктор. Это удобно тогда, когда конструктор будет переписываться и будут добавляться новые аргументы.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Ваще ничего не понимаю. Почему у тебя функция вне класса должна принимать параметры класса?
Почему ты не используешь *args, **kwargs?
Или почему сразу нельзя в функции объявить необходимые для её работы параметры?
У тебя внутри функции используется аргумент, функция вызывается с этим аргументом, но ты его не объявляешь параметром... Паааачииииимуууу?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы