>>> class Person:
... def __init__(self, name):
... self.name = name
... def sayHi(self):
... print('Привет! Меня зовут', self.name)
...
>>> person1 = Person('Tanya')
>>> person2 = Person('Manya')
>>>
>>> person1.sayHi()
Привет! Меня зовут Tanya
>>> person2.sayHi()
Привет! Меня зовут Manya
>>> person1.sayHi()
Привет! Меня зовут Tanya
>>> person2.sayHi()
Привет! Меня зовут Manya
>>>
citizen404
Я не могу понять, какую роль/функцию/назначение играет метод __init__ .
Инициализирует экземпляр класса. В данном случае сохраняет внутри экземпляра (как в коробочке) переданное при создании экземпляра имя. Потом это сохранённое имя используется методом sayHi(), который получает доступ в коробочку через свой первый аргумент - self.
citizen404
Объясните на пальцах в каких случаях нужно использовать __init__
Когда что-то передаёшь при создании экземпляра, чтобы оно сохранилось внутри экземпляра.
citizen404
Зачем указывается параметр self ? О чем это нам говорит ?
Экземпляр при вызове методов у него передаёт сам себя в свой метод первым аргументом. Так метод может обращаться внутрь экземпляра, чтобы сохранять в него что-то или доставать из него что-то.
citizen404
И особенно не понятна строка №3 - self.name = name ??? Для чего эта манипуляция ? Что эта запись по сути вообще выполняет ?
Внутри экземпляра создаёт переменную name в которую записывает значение, переданное внутрь метода через параметр name. Просто они именуются одинаково, но могли бы и по разному именоваться. Но так как у них разные пространства имён, то эти одинаковые имена никак не конфликтуют, так как считаются разными.
Тебе нужно понять различие между классом и экземпляром класса. Класс - это такое описание, а экземпляры - это объекты, создаваемые по этому описанию. Класс для всех экзепляров один и тот же, а экземпляры все разные, поэтому каждый экземпляр класса Person может хранить своё собственное имя человека.