Объявите в программе два класса Point и Rectangle. Объекты первого класса должны создаваться командой:
pt = Point(x, y)
где x, y - координаты точки на плоскости (целые или вещественные числа). При этом в объектах класса Point должны формироваться следующие локальные свойства:
__x, __y - координаты точки на плоскости.
и один геттер:
get_coords() - возвращение кортежа текущих координат __x, __y
Объекты второго класса Rectangle (прямоугольник) должны создаваться командами:
r1 = Rectangle(Point(x1, y1), Point(x2, y2))
или
r2 = Rectangle(x1, y1, x2, y2)
Здесь первая координата (x1, y1) - верхний левый угол, а вторая координата (x2, y2) - правый нижний. При этом, в объектах класса Rectangle (вне зависимости от способа их создания) должны формироваться следующие локальные свойства:
__sp - объект класса Point с координатами x1, y1 (верхний левый угол);
__ep - объект класса Point с координатами x2, y2 (нижний правый угол).
Также к классе Rectangle должны быть реализованы следующие методы:
set_coords(self, sp, ep) - изменение текущих координат, где sp, ep - объекты класса Point;
get_coords(self) - возвращение кортежа из объектов класса Point с текущими координатами прямоугольника (ссылки на локальные свойства __sp и __ep);
draw(self) - отображение в консоли сообщения: "Прямоугольник с координатами: (x1, y1) (x2, y2)". Здесь x1, y1, x2, y2 - соответствующие числовые значения координат.
Создайте объект rect класса Rectangle с координатами (0, 0), (20, 34).
P.S. На экран ничего выводить не нужно
Для примера:
Тест
assert isinstance(rect, Rectangle) and hasattr(Rectangle, 'set_coords') and hasattr(Rectangle, 'get_coords') and hasattr(Rectangle, 'draw'), "в классе Rectangle присутствуют не все методы
Результат
Python
Питон помогите кто понимает
Держите:
Сложная логика с Union и распознаванием типов вручную включена для выполнения требования, что Rectangle может инициализироваться как двумя точками, так и непосредственно четырьмя координатами. В Питоне не нашёл другого способа сделать полиморфный конструктор.
Примечательно, что int можно передать в параметре типа float, но во время выполнения тип параметра будет распознаваться как int, а не как float. "Чудесная" особенность Питона.
Методы __str__ включены, чтобы печатать значения в читабельном виде без дополнительных приседаний с get_coords и т.п.
from typing import Union
class Point:
def __init__(self, x: float, y: float): self.__x, self.__y = x, y
def get_coords(self): return self.__x, self.__y
def __str__(self): return f'({self.__x},{self.__y})'
class Rectangle:
def __init__(self, sx: Union[float, Point], sy: Union[float, Point], ex: float = None, ey: float = None):
self.__sp, self.__ep = None, None
if isinstance(sx, (int, float)) and isinstance(sy, (int, float)):
if isinstance(ex, (int, float)) and isinstance(ey, (int, float)):
self.__sp, self.__ep = Point(sx, sy), Point(ex, ey)
else:
raise TypeError('Не переданы 4 координаты')
elif isinstance(sx, Point) and isinstance(sy, Point):
if ex is None and ey is None:
self.__sp, self.__ep = sx, sy
else:
raise TypeError('Переданы лишние координаты, помимо двух точек')
else:
raise TypeError('Переданы координаты неопознанного типа')
def get_coords(self): return self.__sp, self.__ep
def set_coords(self, sp: Point, ep: Point): self.__sp, self.__ep = sp, ep
def draw(self): print('Прямоугольник с координатами ' + str(self))
def __str__(self): return f'({self.__sp},{self.__ep})'
rect = Rectangle(0, 0, 20, 34)
rect.draw()
rect = Rectangle(0.0, 0.0, 20.0, 34.0)
rect.draw()
rect = Rectangle(Point(0, 0), Point(20, 34))
rect.draw()
rect = Rectangle(Point(0.0, 0.0), Point(20.0, 34.0))
rect.draw()
assert isinstance(rect, Rectangle) and hasattr(Rectangle, 'set_coords') and hasattr(Rectangle, 'get_coords') and hasattr(Rectangle, 'draw'), "в классе Rectangle присутствуют не все методы"
Лишние примеры (rect = Rectangle(...)) и вызовы draw() можете удалить перед сдачей, оставив один rect и assert на него.Сложная логика с Union и распознаванием типов вручную включена для выполнения требования, что Rectangle может инициализироваться как двумя точками, так и непосредственно четырьмя координатами. В Питоне не нашёл другого способа сделать полиморфный конструктор.
Примечательно, что int можно передать в параметре типа float, но во время выполнения тип параметра будет распознаваться как int, а не как float. "Чудесная" особенность Питона.
Методы __str__ включены, чтобы печатать значения в читабельном виде без дополнительных приседаний с get_coords и т.п.
Павел Кругликов
Не прошел код
Похожие вопросы
- Решить две задачи на питоне. Помогите пожалуйста
- Информатика дз на языке питон, помогите пж
- Программирование в питоне помогите
- Задача питон помогите срочно
- ЗАДАЧА ПО ПИТОНУ ПОМОГИТЕ ПЖ
- Задача питон. Помогите решить,пожалуйста
- Программу на питоне, помогите пожалуйста
- Информатика питон помогите пожалуйста
- Крестики Нолики с ИИ в питоне помогите сделать, версии из интернета работают некорректно
- Информатика. Питон. Помогите найти ошибку