Python Glossary English

все Python 3ООПпонятие

self

self

Ссылка на текущий экземпляр класса. Первый параметр методов экземпляра (имя — соглашение).

Синтаксис

def method(self): self.x = ...

self — не ключевое слово, а обычный первый параметр: Python сам подставляет туда объект, когда вы пишете b.double(), поэтому руками его не передают. Забыть self. перед атрибутом — частая ошибка: size = 2 создаёт локальную переменную, которая исчезает после метода, а self.size = 2 действительно меняет объект.

Примеры

class Box:
    def __init__(self, size):
        self.size = size
    def double(self):
        self.size *= 2
b = Box(5)
b.double()  # то же, что Box.double(b): self — это b
print(b.size)  # → 10
class Node:
    def __init__(self, val):
        self.val = val
        self.next = None
    def set_next(self, node):
        self.next = node
n1 = Node(1)
n2 = Node(2)
n1.set_next(n2)
print(n1.next.val)  # → 2
class Builder:
    def __init__(self):
        self.items = []
    def add(self, item):
        self.items.append(item)
        return self  # цепочка!
    def build(self):
        return self.items
b2 = Builder().add(1).add(2).add(3).build()
print(b2)  # → [1, 2, 3]
# Передача self явно
class Calc:
    def sq(self):
        return self.n ** 2
c2 = Calc()
c2.n = 5
print(Calc.sq(c2))  # → 25 (явно)
class Logger:
    prefix = '[LOG]'
    def log(self, msg):
        print(f'{self.prefix} {msg}')
l = Logger()
l.prefix = '[INFO]'
l.log('test')  # → [INFO] test

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности