Python Glossary English

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

Методы экземпляра

методы

Обычные методы класса. Первый параметр — self (ссылка на экземпляр). Могут читать и изменять состояние.

Синтаксис

def method(self, ...): ...

self — не ключевое слово, а всего лишь общепринятое имя первого параметра; Python сам подставляет туда экземпляр, так что obj.method(x) — это сахар для Class.method(obj, x). Отсюда и требование указывать self явно в определении, хотя при вызове его не передают.

Примеры

class Rectangle:
    def __init__(self, w, h):
        self.w = w
        self.h = h
    def area(self):
        return self.w * self.h
    def perimeter(self):
        return 2 * (self.w + self.h)
r = Rectangle(3, 4)
print(r.area())      # → 12
print(r.perimeter()) # → 14
class Stack:
    def __init__(self):
        self._data = []
    def push(self, item):
        self._data.append(item)
        return self  # цепочка
    def pop(self):
        return self._data.pop()
    def peek(self):
        return self._data[-1]
s = Stack()
s.push(1).push(2).push(3)
print(s.pop())  # → 3
class Temperature:
    def __init__(self, celsius):
        self.celsius = celsius
    def to_fahrenheit(self):
        return self.celsius * 9/5 + 32
    def to_kelvin(self):
        return self.celsius + 273.15
t = Temperature(100)
print(t.to_fahrenheit())  # → 212.0
print(t.to_kelvin())      # → 373.15
# Метод вызывает другой метод
class Circle:
    def __init__(self, r):
        self.r = r
    def area(self):
        import math
        return math.pi * self.r ** 2
    def scale(self, factor):
        self.r *= factor
        return self.area()
c = Circle(5)
print(c.scale(2))  # → 314.159...
class BankAccount:
    def __init__(self, balance=0):
        self.balance = balance
    def deposit(self, amount):
        self.balance += amount
    def withdraw(self, amount):
        if amount > self.balance:
            raise ValueError('Insufficient funds')
        self.balance -= amount
acc = BankAccount(100)
acc.deposit(50)
acc.withdraw(30)
print(acc.balance)  # → 120
class WordCounter:
    def __init__(self):
        self._words = []
    def add(self, text):
        self._words.extend(text.split())
    def count(self):
        return len(self._words)
    def most_common(self):
        from collections import Counter
        return Counter(self._words).most_common(3)
wc = WordCounter()
wc.add('the cat sat on the mat')
print(wc.count())  # → 6

См. также

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