Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2009 12:53:35

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

что такое self, это типа сылка на подразумеваемый экземпляр класса? и не совсем понятно что такое __init__?



Офлайн

#2 Окт. 20, 2009 13:12:32

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

не совсем понятно

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



Офлайн

#3 Окт. 20, 2009 13:26:25

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

regall
а для чего он нужен что он делает этот __init__, я видел классы где __init__ не первый метод в классе!

self - это обращение к созданному екземпляру класса-это вообще не понятно! можно пример привести?



Офлайн

#4 Окт. 20, 2009 13:35:25

DHT
От:
Зарегистрирован: 2009-09-24
Сообщения: 119
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

я пока новичек, но насколько знаю перед __init__ вроде может быть __new__, но это редкий случай.
ну и __init__ не обязательно должен быть записан первым (выше по тексту), он просто вызывается первым.



Офлайн

#5 Окт. 22, 2009 13:11:44

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

не совсем понятно

Все не так.
__new__ - это метод класса, который создаёт новый экземпляр класса, тогда как __init__ инициализирует атрибуты объекта.
__init__ вызывается сразу после __new__. Эта связка вызывается всегда при создании нового объекта.
Порядок записи методов значения не имеет.
self - это ссылка на самого себя.

Офлайн

#6 Окт. 22, 2009 14:47:35

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

Ferroman
извини я не совсем понимаю что значит на самого себя, помогите понять!



Офлайн

#7 Окт. 22, 2009 15:27:35

k0sh
От:
Зарегистрирован: 2009-10-08
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

да self это ссылка на экземпляр класса, аналог this в java. __init__ это что то типа конструктора.



Офлайн

#8 Окт. 22, 2009 16:01:04

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

> извини я не совсем понимаю что значит на самого себя, помогите понять!

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

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

self.kurtochka_color = 'red'
определить еще на уровне описания класса (типо курточка экземпляра класса).



Отредактировано (Окт. 22, 2009 16:02:24)

Офлайн

#9 Окт. 22, 2009 16:29:58

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

vaxXxa
класс спасибо все я прозрел! если можешь еще в таком же духе про __init__ и __new__ объясни!



Офлайн

#10 Окт. 22, 2009 17:51:18

GDK
От:
Зарегистрирован: 2009-08-21
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

не совсем понятно

Нет немного не так.

К примеру есть класс ААА. У него есть аттрибут(переменная, поле …. кто как называет) 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().

До Питона никогда не пробовал кодить наверное.



Отредактировано (Окт. 22, 2009 17:58:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version