Изучаю Python, пытаюсь вникнуть с суть программирования как такового, в частности освоить ООП. Приведённый мной код работает, можете особо в его суть не вникать (он просто рисует в консоли треугольник и квадрат заданной пользователем высоты). Меня интересует, соответсвует ли сие творение парадигме ООП, а конкретно реализован ли в данном варианте принцип полиморфизма. Определение полиморфизма которое я нашел вот: "polymorphism is the ability (in programming) to present the same interface for differing underlying forms (data types) / полиморфизмом называют способность (в программировании) представлять один и тот же интерфейс для разных базовых форм (типов данных)." Я пока не особо владею синтаксисом питона и сомневаюсь что правильно предоставил один и тот же интерфейс (class Drawer) для двух типов данных (class Triangle, class Square), как завещает это определение. Если я ошибся, объясните пожалуйста, что будет сделать правильнее, используя парадигму ООП, для реализации функционала, который предоставляет мой код, ну или какой-нибудь свой пример покажите.
class Drawer:
def __init__(self, figure, elements, height):
self.figure = figure
self.elements = elements
self.height = height
def execute(self):
if self.figure == "triangle":
structure = [" " * (self.height - 1) + self.elements[0] + self.elements[2] + "\n"]
string = 1
padding = self.height - 1
while string < self.height:
if string + 1 == self.height:
structure.append(self.elements[0] + self.elements[1] * (self.height - 1) + self.elements[2])
else:
structure.append(" " * (padding - 1) + self.elements[0] + " " * string + self.elements[2] + "\n")
string += 1
padding -= 1
return print("".join(structure))
elif self.figure == "square":
structure = [self.elements[0] + self.elements[1] * (self.height + 1) + self.elements[0] + "\n"]
string = 1
while string < self.height:
if string + 1 == self.height:
structure.append(self.elements[0] + self.elements[2] * (self.height + 1) + self.elements[0])
else:
structure.append(self.elements[0] + " " * (self.height + 1) + self.elements[0] + "\n")
string += 1
return print("".join(structure))
class Triangle:
def __init__(self, height=2):
self.elements = ["/", "_", "|"]
self.height = height
def draw(self):
draw = Drawer("triangle", self.elements, self.height)
draw.execute()
class Square:
def __init__(self, height=2):
self.elements = ["|", "`", "."]
self.height = height
def draw(self):
draw = Drawer("square", self.elements, self.height)
draw.execute()
t1 = Triangle(10)
sq1 = Square(10)
t1.draw()
print()
sq1.draw()