Есть ли согласие, является ли переназначение параметра метода хорошей или плохой практикой? - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу написать метод, подобный этому:

def method(self, long_api_parameter_name=None):
    if long_api_parameter_name is None:
        long_api_parameter_name = self.DEFAULT_X

    return self.another_method(long_api_parameter_name)

Однако мне посоветовали не переназначать параметр метода.Есть ли [полу] официальная рекомендация или хотя бы консенсус в сообществе?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Насколько я могу судить, официального утверждения о переназначении аргументов метода в документах Python или правилах стиля PEP нет.

Ответ brunns - хороший способ добиться этого.что ты ищешь.

** Помните, что значение будет переназначено только в вашем звонке на method ... см. этот вопрос

Некоторые люди считают эту плохую практику, потому что тамдругие языки, стандарты которых утверждают, что параметры метода / функции не должны переназначаться.(например, Javascript )

0 голосов
/ 26 апреля 2019

Для краткости я бы, вероятно, написал бы это

long_api_parameter_name = long_api_parameter_name or self.DEFAULT_X

, но да, это довольно распространенный шаблон в Python.

Обновление :

Если переданное значение может быть оценено как ложное, вы должны сделать что-то немного более сложное:

NOT_PASSED = object()

def method(self, long_api_parameter_name=NOT_PASSED):
    long_api_parameter_name = long_api_parameter_name if long_api_parameter_name is not NOT_PASSED else self.DEFAULT_X

Это позволит явно передавать ложные значения - даже None, но вернуться к значению по умолчаниюесли ничего не указано.

...