Дорогие друзья, просьба помочь разобраться с данной особенностью в Python - не совсем понимаю, механизм работы
self, когда нужно указывать его в методе класса, а когда нет.
Предлагаю следующий пример:
class Student :
def f (self, n, y) :
self.name=n
self.year=y
print(self.name, "is on the", self.year, "-th year")
s=Student()
s.f ("Vasya", 5)
На сколько я понял,
self - это указатель на экземпляр класса, и запись
s.f ("Vasya", 5)
равнозначна записи
Student.f(s,"Vasya", 5)
Т.е. выполняя
s.f("Vasya", 5)
мы не вызываем напрямую метод из экземпляра, а ссылаемся на метод и класса-родителя.
Но мне остается непонятным:
1. В чем будет отличие, если мы вместо
class Student :
def f (self, n, y) :
self.name=n
self.year=y
print(self.name, "is on the", self.year, "-th year")
напишем
class Student :
def f (self, n, y) :
name=n
year=y
print(name, "is on the", year, "-th year")
2. Почему если мы уберем
self из описания класса
class Student :
def f (n,y) :
name = n
year = y
print(name, "is on the", year, "-th year")
то при вызове
s.f("Vasya", 5)
получим ошибку
TypeError: f() takes 2 positional arguments but 3 were given
Какой третий параметр был передан?
3. Когда стоит добавлять
self в описание метода класса, а когда нет?
Заранее спасибо за Ваши ответы!