Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2018 09:09:29

Petr35
Зарегистрирован: 2018-02-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

1) Почему аргумент “self” выполняет еще и функцию экземпляра класса?

2) Чем отличается _init_ от обычной функции и для чего он нужен?

Офлайн

#2 Май 10, 2018 20:01:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

Petr35
1) Почему аргумент “self” выполняет еще и функцию экземпляра класса?
что значит “еще”? self и есть укзатель на экземпляр класса. А какую еще по вашему функцию он выполняет?
Petr35
2) Чем отличается _init_ от обычной функции и для чего он нужен?
если вы имете ввиду __init__ то ничем, это по сути обычная функция(вернее метод класса), кроме того что она автоматом вызываеться при создании экземпляра класса.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 10, 2018 20:03:04)

Офлайн

#3 Май 10, 2018 20:22:26

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

> кроме того что она автоматом вызываеться при создании экземпляра класса.

Она автоматически вызывается после создания экземпляра класса.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Май 13, 2018 13:58:49

Petr35
Зарегистрирован: 2018-02-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

PEHDOM
что значит “еще”? self и есть укзатель на экземпляр класса. А какую еще по вашему функцию он выполняет?

В https://pythonworld.ru/osnovy/obektno-orientirovannoe-programmirovanie-obshhee-predstavlenie.html

написано:

“self - обязательный аргумент, содержащий в себе экземпляр класса”


Как я понял, “self” он же аргумент, он же и экземпляр то есть объект класса.

Я понимаю так, аргумент - параметр это одно, а экземпляр класса это это совсем другое.

********


Я полный чайник! У меня очень много вопросов по этой теме, весь интернет облазил и толкового ответа так и не нашел.


class B:
… arg = ‘Python’ # Все экземпляры этого класса будут иметь атрибут arg,
… # равный “Python”
… # Но впоследствии мы его можем изменить
… def g(self):
… return self.arg


# дальше идет код с моими комментариями?

>>> b = B() # как я понимаю, что это объект “b” класса “B”
>>> b.g() # как я понимаю, что объект “b” класса “B”. Я встречал и такую форму как “self.g()”
'Python'
>>> B.g(b) # это я не понимаю что это?
'Python'
>>> b.arg = ‘spam’ # объект класса с аргументом которому присваиваеться строковое значение ‘spam’
>>> b.g()
'spam'


И еще в чем отличие этого?

b.g()

от этого?

self.g()

помогите пожалуйста!

Отредактировано Petr35 (Май 13, 2018 14:35:10)

Офлайн

#5 Май 13, 2018 22:14:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

Petr35
Как я понял, “self” он же аргумент, он же и экземпляр то есть объект класса.

Я понимаю так, аргумент - параметр это одно, а экземпляр класса это это совсем другое.
нет, self это аргумент, но при вызове метода класса в этот аргумент передается экземпляр класса.
Вернее экземпляр класса передаеться в первый аргумент метода класса, аргумент может иметь имя отличное от self, просто програмисты так договорились чтобы называть первый агрумент self, чтобы проще было читать чужой код.

Petr35
arg = ‘Python’ # Все экземпляры этого класса будут иметь атрибут arg,
… # равный “Python”
… # Но впоследствии мы его можем изменить
… def g(self):
не совсем, на самом деле этот атрибут будет иметь класс В, но алгоритм поиска атрибутов таков что атрибут сначала ищеться в экземпляре, если не находится то тогда в классе, если и там нет, то в родительском классе если есть наследование и тд…
когда вы делаете b.arg = ‘spam’ то вы “перекрываете” атрибут класса, тоесть создаете атрибут экземпляра, но сам атрибут класса не меняеться, чтобы в этом убедиться достаточно сделать print(B.arg).
Вроде разницы то никакой, но ровно до тех пор пока вы работаете с неизменяемыми обьектами, а когда начнете работать с изменяемыми тогда и начнеться веселье, и вы поймете что это существенная разница.

Petr35
>>> b.g() # как я понимаю, что объект “b” класса “B”. Я встречал и такую форму как “self.g()”
'Python'
>>> B.g(b) # это я не понимаю что это?
'Python'

b.g() равнозначно B.g(b). просто в первом случае первым аругментом неявно(интерпретатор делает это автоматически) передаеться указатель на экземпляр класса b, во втором - вы явно это делаете.
Petr35
И еще в чем отличие этого?

b.g()

от этого?

self.g()
в первом вы вызываете метод класса “снаружи” для конкретного экземаляра, во втором “изнутри” класса



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 13, 2018 22:30:40)

Офлайн

#6 Май 14, 2018 00:08:24

Petr35
Зарегистрирован: 2018-02-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

PEHDOM
PEHDOM, cпасибо вам большое за разъяснение!

Отредактировано Petr35 (Май 14, 2018 00:08:57)

Офлайн

#7 Май 16, 2018 14:53:55

Petr35
Зарегистрирован: 2018-02-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

PEHDOM
в первом вы вызываете метод класса “снаружи” для конкретного экземпляра, во втором “изнутри” класса

Забыл спросить, а эти примеры тоже равнозначны?

a.arg = 1

self.arg = 1


Офлайн

#8 Май 16, 2018 15:39:16

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

Petr35
Забыл спросить, а эти примеры тоже равнозначны?

a.arg = 1

self.arg = 1
они не совсем равнозначны, в первом вы конкретно “присваиваете” значение атрибуту “arg” экземпляра “a”. Во втором случае вы вызываете это изнутри класса вообще, без привязки к конкретному экземпляру.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#9 Май 16, 2018 17:40:49

Petr35
Зарегистрирован: 2018-02-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

почему аргумент "self" выполняет еще и функцию экземпляра класса?

PEHDOM
они не совсем равнозначны, в первом вы конкретно “присваиваете” значение атрибуту “arg” экземпляра “a”. Во втором случае вы вызываете это изнутри класса вообще, без привязки к конкретному экземпляру.

Спасибо!


Отредактировано Petr35 (Май 16, 2018 18:05:53)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version