Форум сайта python.su
0
Здравствуйте,
решаю задачу:
Требуется создать класс любых геометрических фигур, где на выход мы получаем характеристики фигуры. Каждый экземпляр должен иметь атрибуты, которые зависят от выбранной фигуры. Например, для прямоугольника это будут аргументы a, b, width и height.
Кроме того вы должны иметь возможность передавать эти атрибуты при создании объекта класса.
Создайте метод, который возвращает атрибуты вашей фигуры в виде строки.
Для реализации используйте str. К примеру, для объекта «прямоугольник» со значениями атрибутов a = 5, b = 10, width = 50, height = 100, метод должен вернуть строку Rectangle(5, 10, 50, 100).
но пока к сожалению команда print(recht_1.atributs_as_string) не распечатывает строку Rectangle(5, 10, 50, 100) как требуется в задании.
Я если честно не совсем понял почему у Rectangle в скобках четыре аргумента/атрибута (а не два как у прямоугольника). Может быть имеется ввиду два прямоугольника: один (a, b), другой(width, height)…. Сейчас уточнить это я не могу, но исхожу из того что в итоге должна распечататься строка Rectangle(5, 10, 50, 100) с четырьмя атрибутами… - раз “старшина” так приказал.
Ниже - моя попытка решить задачу:
# Создайте класс любых геометрических фигур, где на выход мы получаем характеристики фигуры. Каждый экземпляр должен иметь атрибуты, которые зависят от выбранной фигуры. Например, для прямоугольника это будут аргументы x, y, width и height. class Rechtangle: def __init__(self, a, b, width, height): self.a = a self.b = b self.width = width self.height = height # Создайте метод, который возвращает атрибуты вашей фигуры в виде строки. def atributs_as_string(self): return str(self.a, self.b, self.width, self.height) # ??????? # Кроме того вы должны иметь возможность передавать эти атрибуты при создании объекта класса. recht_1 = Rechtangle(5, 10, 50, 100) # создаём обьект recht_1 print(recht_1.atributs_as_string)
Отредактировано Rikin (Дек. 18, 2021 18:34:57)
Офлайн
124
class Rectangle: def __init__(self, a, b, width, height): self.a = a self.b = b self.width = width self.height = height def __str__(self): return 'Rectangle({}, {}, {}, {})'.format(self.a, self.b, self.width, self.height) r = Rectangle(5, 10, 50, 100) print(r)
Офлайн
0
Спасибо. Это Вы конечно мастерски завернули (а я еще не волшебник, а только учусь и таких вещей не проходил).
Поэтому вопросы:
1. def __str__(self):
Функция (или метод?) __str__(self) - это стандартная функция питона, которая как стандартный инструмент предназначена по ее названию трансформировать то что внутри нее в str-формат? Или же мы ее __str__(self) таковой конструируем?
2. return ‘Rectangle({}, {}, {}, {})’.format(self.a, self.b, self.width, self.height)
Если можно, прошу пояснить подробнее по вакантным меcтам которые держат ({}, {}, {}, {}): это понятно что они резервируют места для четырёх аргументов, но Question:
то что в фигурных скобках - стандартная запись для функции __str__(self)
или для метода .format(self.a, self.b, self.width, self.height)
или:
мы именно конструируем функцию (а не взяли готовую), трансформирующую то что имеем в формат строки?
И , если можно: про метод .format в данной конструкции? - потому как совсем ново…
————– —————— ———
Нельзя ли (пожалуйста!) написать код поближе к моему стилю: без __str__ и без метода
.format(….) ?
Отредактировано Rikin (Дек. 19, 2021 02:40:39)
Офлайн
857
Rikin
Требуется создать класс любых геометрических фигур, где на выход мы получаем характеристики фигуры. Каждый экземпляр должен иметь атрибуты, которые зависят от выбранной фигуры. Например, для прямоугольника это будут аргументы a, b, width и height.
Кроме того вы должны иметь возможность передавать эти атрибуты при создании объекта класса.
Создайте метод, который возвращает атрибуты вашей фигуры в виде строки.
Для реализации используйте str. К примеру, для объекта «прямоугольник» со значениями атрибутов a = 5, b = 10, width = 50, height = 100, метод должен вернуть строку Rectangle(5, 10, 50, 100).
>>> class Shape: ... def to_string(self): ... name = self.__class__.__name__ ... attrs = self.__dict__.values() ... return name + '(' + ', '.join(map(str, attrs)) + ')' ... >>> class Rectangle(Shape): ... def __init__(self, x, y, width, height): ... self.x = x ... self.y = y ... self.width = width ... self.height = height ... >>> class Triangle2D(Shape): ... def __init__(self, x1, y1, x2, y2, x3, y3): ... self.x1 = x1 ... self.y1 = y1 ... self.x2 = x2 ... self.y2 = y2 ... self.x3 = x3 ... self.y3 = y3 ... >>> class Circle(Shape): ... def __init__(self, x, y, r): ... self.x = x ... self.y = y ... self.r = r ... >>> class Triangle3D(Shape): ... def __init__(self, x1, y1, z1, x2, y2, z2, x3, y3, z3): ... self.x1 = x1 ... self.y1 = y1 ... self.z1 = z1 ... self.x2 = x2 ... self.y2 = y2 ... self.z2 = z2 ... self.x3 = x3 ... self.y3 = y3 ... self.z3 = z3 ... >>> rectangle = Rectangle(5, 10, 50, 100) >>> rectangle.to_string() 'Rectangle(5, 10, 50, 100)' >>> >>> triangle2d = Triangle2D(0, 0, 2, 2, 5, 0) >>> triangle2d.to_string() 'Triangle2D(0, 0, 2, 2, 5, 0)' >>> >>> circle = Circle(1, 1, 15) >>> circle.to_string() 'Circle(1, 1, 15)' >>> >>> triangle3d = Triangle3D(0, 0, 0, 2, 2, 0, 0, 0, 5) >>> triangle3d.to_string() 'Triangle3D(0, 0, 0, 2, 2, 0, 0, 0, 5)' >>>
Офлайн
0
py.user.next
Офлайн