Python

Объясните, пожалуйста, максимально понятно и кратко. Сколько раз слушал объяснение, не понял

Что такое __init__ & self в python в классах?
Этот метод используется для работы с экземплярами класса. Когда ты создаешь класс, то можешь сразу указать то, что в нем будет.

 class bicycle(object): 
def __init__(self, name, price, color, brand):
self.name = name
self.price = price
self.color = color
self.brand = brand
Заметь, не для всего класса, а именно для его экземпляров.


 class bicycle(object): 
color="black"
def __init__(self, name, price, brand,color):
self.name = name
self.price = price
self.brand = brand
self.color = color
lada=bicycle("lada","1000","lada","white")
print(lada.color)
Вот тут происходит переопределение свойства класса color. В итоге выведет white a не black.
Влад Миронов
Влад Миронов
13 649
Лучший ответ
Влад Миронов А вот пример класса без использования этого метода.

 class calculator(object): 
@staticmethod
def calculate(a,b):
return a+b
print(calculator.calculate(10,20))
self - имя первого параметра метода. Первым параметром в метод всегда передаётся объект, для которого этот метод вызван. И имя этого параметра может быть любым. А self только потому, что так принято.

Во многих языках для передачи объекта используется неявный (не указываемый в заголовке) параметр с именем this - без вариантов. В Go имя параметра-объекта может быть любым, но оно в заголовке синтаксически отделено от прочих параметров - не перепутаешь. А в Python объект просто сделали первым параметром и предложили всегда называть self - чтобы не путаться.

Когда ты создаёшь объект, сначала создаётся пустой объект, а потом автоматически вызывается метод __init__, который производит создание и инициализацию полей объекта. Первым параметром в __init__ передаётся свежесозданный объект, а дальше идут все те значения, которые ты задал в операции создании объекта.

Метод __init__ внутри себя может содержать любой код, выполняющий любые действия, но принято ограничиваться инициализацией.

P.S. В действительности чуть сложнее: между созданием пустого объекта и вызовом __init__ есть ещё вызов __new__. Но это отдельная тема.
Еркин Асел ***
Еркин Асел ***
87 850
__init__ это конструктор, а self это ссылка на текущий экземпляр класса,то есть this
Инит этот типо конструктора, а селф — ссылка на его экземпляр, как this в жс. Только там его не надо передавать а тут странно это придумано. Ещё раз, через селф, ты можешь обращаться к созданному объекту из класса, это применяется для всех объектов, ты можешь сконфигурировать свойства еще до их создания
Leshchenko Dmitry
Leshchenko Dmitry
6 773
__init__, __str__ и прочее подобное - дантер-методы, встроенные функции, которые можно переопределять. Например если переопределить __str__, то стандартная функция print будет вести себя так как ее указали в переопределении.
self - ссылка на контекст вызова. Все эти дела важны для ООП, в обычном процедурном коде их нет и можно не заморачиваться
Размер твоего члена
Алексей Кротов Иди в садик из пластилина поделки лепить
поперечно-полоосатый минет
BA
Bulut Ay
139