Конструктор проверяет размеры и сохраняет их в экземпляре, а area возвращает произведение. Проверка type(value) is int исключает bool, который иначе проходит isinstance(value, int).
Как реализовать класс прямоугольника с методом площади
Конструктор проверяет размеры и сохраняет их в экземпляре, а area возвращает произведение. Проверка type(value) is int исключает bool, который иначе проходит isinstance(value, int).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
На Python нужен класс Rectangle(width, height) с полями width и height и методом area(). В этой задаче размеры — положительные целые числа; логические значения и остальные типы запрещены. Реализуйте проверку и пример использования.
Ответ
Конструктор проверяет размеры и сохраняет их в экземпляре, а area возвращает произведение. Проверка type(value) is int исключает bool, который иначе проходит isinstance(value, int).
class Rectangle:
def __init__(self, width, height):
for value in (width, height):
if type(value) is not int:
raise TypeError('Размер должен быть целым числом')
if value <= 0:
raise ValueError('Размер должен быть положительным')
self.width = width
self.height = height
def area(self):
return self.width * self.height
rectangle = Rectangle(3, 4)
assert rectangle.area() == 12
Проверки относятся к созданию объекта. Поля в данном варианте открыты: прямое присваивание после создания не валидируется. Если инвариант нужен на всём сроке жизни объекта, следует добавить управляемые свойства либо запретить изменение размеров.