в методе класса self
- это экземпляр класса, к которому вызывается метод. имейте в виду, что self
- это не ключевое слово в python, а обычное имя, данное первому аргументу метода.
посмотрите на этот пример:
class A:
def foo(self):
print "I'm a.foo"
@staticmethod
def bar(s):
print s
a = A()
a.foo()
A.foo(a)
здесь a
- это экземпляр класса A
. вызывая a.foo()
, вы вызываете метод foo
экземпляра a
, в то время как A.foo(a)
вызывает метод foo
в классе A
, но передает экземпляр a
в качестве первого аргумента, и они в точности совпадают вещь (но никогда не используйте вторую форму).
staticmethod
- это декоратор, который позволяет вам определять метод класса как статический. эта функция больше не является методом, и первый аргумент не является экземпляром класса, но является именно первым аргументом, который вы передали этой функции:
a.bar("i'm a static method")
i'm a static method
A.bar("i'm a static method too")
i'm a static method too
PS. я не хочу беспокоить вас, но это основа Python, Учебник Python - хорошее начало для начинающих.