1) Почему аргумент “self” выполняет еще и функцию экземпляра класса?
2) Чем отличается _init_ от обычной функции и для чего он нужен?
Petr35что значит “еще”? self и есть укзатель на экземпляр класса. А какую еще по вашему функцию он выполняет?
1) Почему аргумент “self” выполняет еще и функцию экземпляра класса?
Petr35если вы имете ввиду __init__ то ничем, это по сути обычная функция(вернее метод класса), кроме того что она автоматом вызываеться при создании экземпляра класса.
2) Чем отличается _init_ от обычной функции и для чего он нужен?
PEHDOM
что значит “еще”? self и есть укзатель на экземпляр класса. А какую еще по вашему функцию он выполняет?
Petr35нет, self это аргумент, но при вызове метода класса в этот аргумент передается экземпляр класса.
Как я понял, “self” он же аргумент, он же и экземпляр то есть объект класса.
Я понимаю так, аргумент - параметр это одно, а экземпляр класса это это совсем другое.
Petr35не совсем, на самом деле этот атрибут будет иметь класс В, но алгоритм поиска атрибутов таков что атрибут сначала ищеться в экземпляре, если не находится то тогда в классе, если и там нет, то в родительском классе если есть наследование и тд…
arg = ‘Python’ # Все экземпляры этого класса будут иметь атрибут arg,
… # равный “Python”
… # Но впоследствии мы его можем изменить
… def g(self):
Petr35
>>> b.g() # как я понимаю, что объект “b” класса “B”. Я встречал и такую форму как “self.g()”
'Python'
>>> B.g(b) # это я не понимаю что это?
'Python'
Petr35в первом вы вызываете метод класса “снаружи” для конкретного экземаляра, во втором “изнутри” класса
И еще в чем отличие этого?
b.g()
от этого?
self.g()
PEHDOMPEHDOM, cпасибо вам большое за разъяснение!
PEHDOM
в первом вы вызываете метод класса “снаружи” для конкретного экземпляра, во втором “изнутри” класса
Petr35они не совсем равнозначны, в первом вы конкретно “присваиваете” значение атрибуту “arg” экземпляра “a”. Во втором случае вы вызываете это изнутри класса вообще, без привязки к конкретному экземпляру.
Забыл спросить, а эти примеры тоже равнозначны?
a.arg = 1
self.arg = 1
PEHDOM
они не совсем равнозначны, в первом вы конкретно “присваиваете” значение атрибуту “arg” экземпляра “a”. Во втором случае вы вызываете это изнутри класса вообще, без привязки к конкретному экземпляру.