Конструктор делает странные вещи с дополнительными параметрами [дубликат]

11
задан martineau 31 May 2019 в 02:49
поделиться

2 ответа

Проблема в том, что значение по умолчанию необязательного аргумента - это только один экземпляр. Поэтому, например, если вы скажете def __init__(self, value, c=[]):, этот же список [] будет передаваться в метод каждый раз, когда необязательный аргумент будет использоваться вызывающим кодом.

Поэтому, в основном, вы должны использовать только неизменяемые типы дат, такие как None для значения по умолчанию необязательного аргумента. Например:

def __init__(self, value, c=None):

Тогда вы можете просто создать новый список в теле метода:

if c == None:
  c = []
13
ответ дан 3 December 2019 в 07:36
поделиться

Изменяемые аргументы по умолчанию являются источником путаницы.

См. Этот ответ: «Наименьшее удивление» и изменяемый аргумент по умолчанию

3
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

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