Как просто передать параметры методу без запуска при первом вызове и запустить его без параметров при повторном вызове? - PullRequest
0 голосов
/ 04 августа 2020

По какой-то причине я надеюсь, что когда я впервые вызываю метод test (), он просто передает параметры, но когда я снова вызываю его (without parameters), он запускается.

Я знаю, что использую self. a, self.b будет выбором, но я не хочу, чтобы параметры были свойствами экземпляра.

class Foo:
    def __init__(self) -> None:
        self.test(a=1, b=2)          # I hope this doesn't call method test but pass parameters 

    def test(self, a=None, b=None):
        print('in test')
        return a, b
        
    def get_from_test(self):
        return self.test()      # I hope it can run without parameters


f = Foo()
t = f.get_from_test()
print(t)

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Возможное решение - инициализировать значения по умолчанию для a и b. Затем, если параметры не указаны (например, None, используйте значение по умолчанию)

class Foo:
    def __init__(self) -> None:
        self._default_a=1
        self._default_b=2

    def test(self, a=None, b=None):
        print('in test')
        return a if a is not None else self._default_a, b if b is not None else self._default_b

    def get_from_test(self):
        return self.test()      # I hope it can run without parameters


f = Foo()
t = f.get_from_test()
print(t)
0 голосов
/ 04 августа 2020

Вот возможное решение:

class Foo:
    def __init__(self) -> None:
        self._a, self._b = None, None
        self.test(a=1, b=2)
    def test(self, a=None, b=None):
        if a is None:
            a = self._a
        else:
            self._a = a
        if b is None:
            b = self._b
        else:
            self._b = b
        return a, b

Таким образом, каждый раз, когда вы вызываете test, устанавливая a и / или b, их значения сохраняются в памяти, чтобы их можно было повторно используется позже. Пример:

f = Foo()
print(f.test()) # 1, 2
print(f.test(b=4)) # 1, 4
print(f.test()) # 1, 4
print(f.test(a=3)) # 3, 4
print(f.test()) # 3, 4
print(f.test(2, 7)) # 2, 7
print(f.test()) # 2, 7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...