Передача методу аргументов по умолчанию, полученных от другого метода

Рейтинг: 1Ответов: 1Опубликовано: 30.06.2023

Помогите, пожалуйста, разобраться - как передать методу аргумент "по умолчанию", возвращенный другим методом?

Поясню вопрос на примере.

class Test:
    def return_b(self) -> int:
        b = 5
        return b

    def a_plus_b(self, a, b=return_b) -> None:
        print(a + b)

В данном случае, в метод a_plus_b в переменную b передается адрес в памяти как значение по-умолчанию, соответственно, код в таком виде не работает. Вижу два варианта разрешения ситуации: первый - переписать функцию, явно задав значение b:

def a_plus_b (self, a, b=return_b) -> None:
    b = self.return_b()
    print (a+b)

Второй вариант - работая непосредственно с объектом, передать значение функцией:

obj = Test()
obj.a_plus_b(3,obj.return_b())

Вопрос. Как возможно по-другому реализовать функцию a_plus_b, чтобы она принимала аргумент по-умолчанию - как возвращенное значение функции return_b? Хотелось бы как-то так, но на второй self интерпретатор ругается:

def a_plus_b(self, a, b=self.return_b()) -> None:
    print(a + b)

P.S. только начал изучать ООП в Python, не кидайтесь тряпками =) Большое спасибо!

Ответы

▲ 4Принят

Можно использовать "специальное значение" для неустановленных аргументов. В качестве такого значения, часто, используется None, но можно и другое значение, в зависимости от контекста задачи.

def a_plus_b (self, a, b = None) -> None:
    if b is None:
         b= self.return_b()
    print (a+b)