Почему конструкторы действительно называются «Конструкторами»?
Конструктор (с именем __new__
) создает и возвращает новый экземпляр класса.Таким образом, метод класса C.__new__
является конструктором для класса C.
Метод экземпляра C.__init__
вызывается для определенного экземпляра после его создания, чтобы инициализировать его перед тем, какперешел обратно к абоненту.Таким образом, этот метод является инициализатором для новых экземпляров C.
Чем они отличаются от методов в классе?
Как указано в официальная документация __init__
- , вызываемая после создания экземпляра .Другие методы не получают эту обработку.
Какова их цель?
Цель конструктора C.__new__
- определить пользовательское поведение при создании нового C
instance.
Цель инициализатора C.__init__
состоит в том, чтобы определить пользовательскую инициализацию каждого экземпляра C
после его создания.
Например, Python позволяет вам делать:
class Test(object):
pass
t = Test()
t.x = 10 # here you're building your object t
print t.x
Но если вы хотите, чтобы каждый экземпляр Test
имел атрибут x
, равный 10, вы можете поместить этот код в __init__
:
class Test(object):
def __init__(self):
self.x = 10
t = Test()
print t.x
Каждый метод экземпляра (метод, вызываемый для определенного экземпляра класса) получает экземпляр в качестве первого аргумента.Этот аргумент условно называется self
.
Методы класса, такие как конструктор __new__
, вместо этого получают класс в качестве первого аргумента.
Теперь, если вы хотите использовать пользовательские значения дляx
атрибут, все, что вам нужно сделать, это передать это значение в качестве аргумента __init__
:
class Test(object):
def __init__(self, x):
self.x = x
t = Test(10)
print t.x
z = Test(20)
print t.x
Я надеюсь, что это поможет вам устранить некоторые сомнения, и поскольку вы уже получили хорошие ответы надругие вопросы я остановлюсь здесь:)