5. Модернизация программы №3 путём наследования класса.
Условие:
Нужно создать класс на основе текущего из программы №3. В классе необходимо добавить функционал для новой точки z. Получатся уже координаты точки не 2d, а 3d.
Код:
############ создание супер-класса ##############################################################################################################################
class Point:
def __init__(self, x=0, y=0): # гарантировано создадим атрибуты __x и __y для объекта
self.__x = x # состояние по-умолчанию для атрибута __x, если не указан другой - это 0
self.__y = y # состояние по-умолчанию для атрибута __y, если не указан другой - это 0
def __repr__(self): # создаёт печатную форму для объекта
return f"Координаты x: {self.__x}, координаты y: {self.__y}"
def get_x(self): # создаём geter и seter для x
return self.__x
def set_x(self, value):
self.__x = value
def move_x(self, value):
self.__x += value
x = property(get_x, set_x)
x_move = property(get_x, move_x)
def get_y(self): # создаём geter и seter для y
return self.__y
def set_y(self, value):
self.__y = value
def move_y(self, value):
self.__y += value
y = property(get_y, set_y)
y_move = property(get_y, move_y)
############### создание подкласса, наследование #################################################################################################################
class Third_point(Point): # создаём подкласс
def __init__(self, x=0, y=0, z=0):
self.__z = z # состояние по-умолчанию для атрибута __z
Point.__init__(self, x, y) # состояние по-умолчанию для атрибута __x и атрибута __y. Обращается в суперкласс.
def __repr__(self): # создаёт печатную форму для объекта
s = Point.__repr__(self) # берём печатную форму из основного класса, она будет частью новой печати (стр.ниже)
return f"{s}, координаты z: {self.__z}"
def get_z(self): # создаём geter и seter для z (аналогично x и y)
return self.__z
def set_z(self, value):
self.__z = value
def move_z(self, value):
self.__z += value
z = property(get_z, set_z)
z_move = property(get_z, move_z)
################ тестирование нового объекта #####################################################################################################################
two = Third_point() # создадим объект нового класса Third_point
print()
print(two) # выведем состояние объекта с координатами по-умолчанию: "Координаты x: 0, координаты y: 0, координаты z: 0"
two.x = 1 # меняем координаты x (обращается к свойству основного класса минуя Third_point)
two.y = 2 # меняем координаты y (обращается к свойству основного класса минуя Third_point)
two.z = 3 # меняем координаты z
print(two) # выведем состояние объекта с координатами
two.x_move = -1 # изменяем координаты x на дельту (обращается к свойству основного класса минуя Third_point)
two.y_move = -2 # изменяем координаты y на дельту (обращается к свойству основного класса минуя Third_point)
two.z_move = -3 # изменяем координаты z на дельту
print(two)