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