====== Классы ====== * Объект = структура данных + методы обработки * Класс — генератор объектов * Объект в 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