Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Сами точки класса Point выводятся так, как было задумано, чего не скажешь о выводе списка точек.
- >>> print([Point(’A’, 0, 3), Point(’B’, 4, 0)])
- [<__main__.Point object at 0x0321CF10>, <__main__.Point object at 0x0321C290>]
- Дело в том, что контейнеры при выводе своих элементов используют не метод __str__ (удобный для печати), а более строгий и формальный метод __repr__.
- Конечно, мы можем определить __repr__ точно таким же образом как и __str__, но правильнее будет задать такое «официальное» представление экземпляра класса, чтобы из него можно было как можно легче (например, с помощью функции eval) и без потери информации получить обратно такой же объект (или по крайней мере максимально приближенный к исходному).
- В нашем случае такое формальное строковое представление может выглядеть как создание объекта в коде: имя класса и в круглых скобках три параметра, например, Point(’A’, 1, 5). Для простоты будем считать, что кавычки и спецсимволы в именах точек встречаться не могут.
- Таким образом, наша задача — реализовать метод __repr__, возвращающий строковое представление в выбранном нами формате.
- Ввод:
- points = [Point('A', 0, 3), Point('B', 4, 0)]
- print(points)
- print(points[0])
- print(repr(points[0]))
- Вывод:
- [Point('A', 0, 3), Point('B', 4, 0)]
- A(0, 3)
- Point('A', 0, 3)
- Код:
- class Point:
- def __init__(self, name, x, y):
- self.x = x
- self.y = y
- self.name = name
- def get_x(self):
- return self.x
- def get_y(self):
- return self.y
- def get_coords(self):
- return (self.x, self.y)
- def __repr__(self):
- return f"{self.name}{(self.x, self.y)}"
- def __invert__(self):
- return Point(self.name, self.y, self.x)
Add Comment
Please, Sign In to add comment