Найти - Пользователи
Полная версия: не совсем понятно
Начало » Python для новичков » не совсем понятно
1 2
Malinaizer
что такое self, это типа сылка на подразумеваемый экземпляр класса? и не совсем понятно что такое __init__?
regall
Dive into Python
Метод __init__ вызывается сразу после создания экземпляра класса. Соблазнительно, но не правильно называть этот метод конструктором. Соблазнительно, потому что он выглядит как конструктор (принято, чтобы __init__ был первым методом, определенным в классе), ведет себя как коструктор (это перый кусок кода, вызываемый в созданном экземпляре класса) и даже называется как коструктор. Неправильно, так как к тому времени, когда вызывается метод __init__, объект уже создан и вы имеете ссылку на созданный экземпляр класса. Но метод __init__ — это самое близкое к конструктору, из того что есть в языке Python.
self - это обращение к созданному екземпляру класса.
Malinaizer
regall
а для чего он нужен что он делает этот __init__, я видел классы где __init__ не первый метод в классе!

self - это обращение к созданному екземпляру класса-это вообще не понятно! можно пример привести?
DHT
я пока новичек, но насколько знаю перед __init__ вроде может быть __new__, но это редкий случай.
ну и __init__ не обязательно должен быть записан первым (выше по тексту), он просто вызывается первым.
Ferroman
Все не так.
__new__ - это метод класса, который создаёт новый экземпляр класса, тогда как __init__ инициализирует атрибуты объекта.
__init__ вызывается сразу после __new__. Эта связка вызывается всегда при создании нового объекта.
Порядок записи методов значения не имеет.
self - это ссылка на самого себя.
Malinaizer
Ferroman
извини я не совсем понимаю что значит на самого себя, помогите понять!
k0sh
да self это ссылка на экземпляр класса, аналог this в java. __init__ это что то типа конструктора.
vaxXxa
> извини я не совсем понимаю что значит на самого себя, помогите понять!

Смотри.. у тебя есть группа в университете. Это класс… он состоит из экземпляров (это ты, Петя, Вася, Лена)…
Воть.. НУ, и тут ты хочешь, чтобы при создании этого класса у каждого студента была красная курточка.
Ты можешь после создания каждого экземпляра (Вася, Петя, Лена) написать

Vasya.kurtochka_color = 'red'
Petya.kurtochka_color = 'red'
...
типо Васина курточка, Петина курточка и т.д. а можешь

self.kurtochka_color = 'red'
определить еще на уровне описания класса (типо курточка экземпляра класса).
Malinaizer
vaxXxa
класс спасибо все я прозрел! если можешь еще в таком же духе про __init__ и __new__ объясни!
GDK
Нет немного не так.

К примеру есть класс ААА. У него есть аттрибут(переменная, поле …. кто как называет) myAttr. И у него же есть метод useMeth, который должен при вызове изменить параметр myAttr. Как это сделать?


class AAA ():
myAttr="Empty"
## def __init__(self):
## self.myAttr = "__init__: Not Empty"
def useMeth(self):
self.myAttr= "useMeth: Not Empty"



"Пробуем использовать"

Var=AAA()

print(Var.myAttr)

Var.useMeth()

print(Var.myAttr)
Сначала пробуй запустить как есть, потом раскомментируй метод инит. Поймёшь зачем она нужна. Автоматически она вызывается при выполнении Var=AAA().

До Питона никогда не пробовал кодить наверное.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB