Классы

  • Объект = структура данных + методы обработки
  • Класс — генератор объектов
  • Объект в Python — составной тип данных
  • Первым аргументом всех методов класса является сам объект self
  • При создании каждого объекта класса вызывается метод __init__ — конструктор
  • При выходе объекта из области видимости — метод __del__ — деструктор

Синтаксис:

class <имя класса>:
␣␣␣␣
␣␣␣␣# Методы
␣␣␣␣


Пример класса

В отличии от С подобных языков, поля объекта задаются не в классе, а в конструкторе. Из этого правила есть исключение — классы созданные со специальным полем __slots__.

class Rect:
    def __init__(self, w, h):
        self.x = 0
        self.y = 0
        self.width = w
        self.height = h

    def area(self):
        return self.width * self.height

    def move_to(self, x, y):
        self.x = x
        self.y = y

Объект класса

Создание:

fig = Rect(2,2)

Вывод на печать:

print(fig) # <__main__.Rect object at 0x????????>

Определение типа:

type(fig) == Rect # True

Вызов методов:

s = fig.area() # s == 4
fig.move_to(2,2)
print(fig.x, fig.y) # 2 2

Наследование классов

class Figure:
    def __init__(self, x = 0, y = 0, l = "No label"):
        self.x = x
        self.y = y
        self.fig_label = l

    def area(self):
        raise NotImplementError

    def move_to(self, x, y):
        self.x = x
        self.y = y        

    def label(self):
        return self.fig_label

    def set_label(self, l):
       self.fig_label = l
class Rect(Figure):
    def __init__(self, x = 0, y = 0, l = "", w = 0, h = 0):
        super().__init__(x,y,l)
        self.width = w
        self.height = h

    def area(self):
        return self.width*self.height

Объект унаследованного класса

Создание:

fig = Rect(2,2)

Вывод на печать:

print(fig) # <__main__.Rect object at 0x????????>

Определение типа:

type(fig) == Rect # True

Вызов методов:

s = fig.area() # s == 4
fig.set_label("Test")
fig.move_to(2,2)
print(fig.label(), fig.x, fig.y) # 2 2