Guest User

Untitled

a guest
Sep 24th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. Сами точки класса Point выводятся так, как было задумано, чего не скажешь о выводе списка точек.
  2.  
  3. >>> print([Point(’A’, 0, 3), Point(’B’, 4, 0)])
  4. [<__main__.Point object at 0x0321CF10>, <__main__.Point object at 0x0321C290>]
  5. Дело в том, что контейнеры при выводе своих элементов используют не метод __str__ (удобный для печати), а более строгий и формальный метод __repr__.
  6.  
  7. Конечно, мы можем определить __repr__ точно таким же образом как и __str__, но правильнее будет задать такое «официальное» представление экземпляра класса, чтобы из него можно было как можно легче (например, с помощью функции eval) и без потери информации получить обратно такой же объект (или по крайней мере максимально приближенный к исходному).
  8.  
  9. В нашем случае такое формальное строковое представление может выглядеть как создание объекта в коде: имя класса и в круглых скобках три параметра, например, Point(’A’, 1, 5). Для простоты будем считать, что кавычки и спецсимволы в именах точек встречаться не могут.
  10.  
  11. Таким образом, наша задача — реализовать метод __repr__, возвращающий строковое представление в выбранном нами формате.
  12. Ввод:
  13. points = [Point('A', 0, 3), Point('B', 4, 0)]
  14. print(points)
  15. print(points[0])
  16. print(repr(points[0]))
  17. Вывод:
  18. [Point('A', 0, 3), Point('B', 4, 0)]
  19. A(0, 3)
  20. Point('A', 0, 3)
  21. Код:
  22. class Point:
  23. def __init__(self, name, x, y):
  24. self.x = x
  25. self.y = y
  26. self.name = name
  27.  
  28. def get_x(self):
  29. return self.x
  30.  
  31. def get_y(self):
  32. return self.y
  33.  
  34. def get_coords(self):
  35. return (self.x, self.y)
  36.  
  37. def __repr__(self):
  38. return f"{self.name}{(self.x, self.y)}"
  39.  
  40. def __invert__(self):
  41. return Point(self.name, self.y, self.x)
Add Comment
Please, Sign In to add comment