Конструктор цепочки в питоне - PullRequest
5 голосов
/ 04 декабря 2011

У меня в классе два конструктора:

def __init__(self):
  self(8)

def __init__(self, size):
  self.buffer = [1] * size

Где я хочу, чтобы первый конструктор вызывал второй с размером по умолчанию. Это достижимо в питоне?

Ответы [ 3 ]

9 голосов
/ 04 декабря 2011

Вы не можете определить несколько инициализаторов в Python (как указано в комментариях, __init__ на самом деле не является конструктором ), но вы можете определить значения по умолчанию, например:

def __init__(self, size=8):
  self.buffer = [1] * size

В приведенном выше коде по умолчанию создается буфер размером 8, но если указан параметр размера, вместо него будет использоваться параметр.

Например, предположим, что инициализатор находится внутри классаназывается Example.Этот вызов создаст новый экземпляр класса с буфером размера 8 (по умолчанию):

e = Example()

Тогда как этот вызов создаст новый экземпляр с буфером размера 10:

e = Example(10)

Кроме того, вы также можете вызвать конструктор следующим образом:

e = Example(size=10)
5 голосов
/ 04 декабря 2011

Нет, вы не можете перегружать методы в Python.В этом случае вместо параметра size можно просто использовать значение по умолчанию:

def __init__(self, size=8):
  self.buffer = [1] * size
1 голос
/ 04 декабря 2011

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

def __init__(self, size = 8):
  self.buffer = [1] * size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...