Методы Python - это просто функции, которые связаны с классом или экземпляром класса.Единственное отличие состоит в том, что метод (он же связанная функция) ожидает объект экземпляра в качестве первого аргумента.Кроме того, когда вы вызываете метод из экземпляра, он автоматически передает экземпляр в качестве первого аргумента.Итак, определяя self
в методе, вы указываете ему пространство имен для работы.
Таким образом, когда вы указываете self.a
, метод знает, что вы изменяете переменную экземпляра a
, которая является частью пространства имен экземпляра.
Область видимости Python работает изнутри, поэтому каждая функция (или метод) имеет свое собственное пространство имен.Если вы создаете переменную a
локально в методе p
(эти имена сосут, кстати), она отличается от переменной self.a
.Пример использования вашего кода:
class d:
def __init__(self,arg):
self.a = arg
def p(self):
a = self.a - 99
print "my a= ", a
print "instance a= ",self.a
x = d(1)
y = d(2)
x.p()
y.p()
Что дает:
my a= -98
instance a= 1
my a= -97
instance a= 2
Наконец, вам не нужно вызывать первую переменную self
.Вы можете называть это как хотите, хотя на самом деле не должны.Условно определять и ссылаться на self
изнутри методов, поэтому, если вам все равно, что другие люди читают ваш код, не желая вас убивать, придерживайтесь соглашения!
Дальнейшее чтение: