Найти - Пользователи
Полная версия: Создание класса + Создание метода, который возвращает атрибуты вашего обьекта в виде строки
Начало » Центр помощи » Создание класса + Создание метода, который возвращает атрибуты вашего обьекта в виде строки
1
Rikin
Здравствуйте,
решаю задачу:

Требуется создать класс любых геометрических фигур, где на выход мы получаем характеристики фигуры. Каждый экземпляр должен иметь атрибуты, которые зависят от выбранной фигуры. Например, для прямоугольника это будут аргументы 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)

Прошу подсказки, помощи по решению.
xam1816
 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)

первые два числа, координаты точки от которого будет строится прямоугольник
Rikin
Спасибо. Это Вы конечно мастерски завернули (а я еще не волшебник, а только учусь и таких вещей не проходил).
Поэтому вопросы:


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(….) ?
py.user.next
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)'
>>>
Rikin
py.user.next

Ну Вы волшебник! Спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB