динамическое значение по умолчанию в python - PullRequest
0 голосов
/ 07 июня 2018

У меня есть случай, когда я пытаюсь сделать код, аналогичный приведенному ниже, print 2 вместо 1.

class foo():
    _default_val = 1
    @classmethod
    def print_num(cls, num=_default_val):
        print(num)

class foo2(foo):
    _default_val = 2

tester = foo2()
tester.print_num()
# 1

Конечно, я мог бы установить num=None и получить доступ к self._default_val, если он все ещеNone, однако я хотел бы знать, есть ли более аккуратный способ достижения этого.

Примечание: я также знаю, что это сработает, если я скопирую и вставлю функцию, но я считаю это плохой практикой, поскольку мне придется сохранять все копии этой функции для каждого внесенного мной изменения

1 Ответ

0 голосов
/ 07 июня 2018

Стандартный способ действительно установить значение по умолчанию None и проверить, является ли оно is not None.

Это так часто используется, что другие разработчики Python сразу поймут, что вы хотели, поэтому вам не следуетпопробуй заново изобрести колесо.

class Foo():
    _default_val = 1

    @classmethod
    def print_num(cls, num=None):
        num = num if num is not None else cls._default_val
        print(num)

class Foo2(Foo):
    _default_val = 2

tester = Foo2()
tester.print_num(0) # prints: 0
tester.print_num() # prints: 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...