repr.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. '''
  2. Функции str() и print() вызывают __str__()
  3. repr() - __repr__()
  4. Если __str__ нет, то будет вызваться __repr__
  5. '''
  6. class User:
  7. def __init__(self, first_name):
  8. self.first_name = first_name
  9. def __str__(self):
  10. return f'User {self.first_name}'
  11. def __repr__(self):
  12. return f'Repr Usef {self.first_name}'
  13. class Pizza:
  14. pass
  15. def test_1():
  16. # print(repr([1, 2, 3]))
  17. user = User('John')
  18. print(repr(user))
  19. print(repr(Pizza()))
  20. class UnknownUser:
  21. pass
  22. def test_2():
  23. users = [UnknownUser(), UnknownUser()]
  24. print(users)
  25. users_with_name = [User('Billy'), User('Jimmy')]
  26. print(users_with_name)
  27. print(users_with_name[0])
  28. print(users_with_name[1])
  29. class SuperUser:
  30. def __init__(self, first_name, last_name):
  31. self.first_name = first_name
  32. self.last_name = last_name
  33. def __str__(self):
  34. return f"__str__ method: {self.first_name} {self.last_name}"
  35. def __repr__(self):
  36. return f"__repr__ method: {self.first_name} {self.last_name}"
  37. def test_3():
  38. user = SuperUser("Vasya", "Pypkin")
  39. print(f"{repr(user)}")
  40. # или лучше воспользоваться !r
  41. print(f"{user!r}") # !r вызовет не __str__, а __repr__
  42. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  43. class Pizza:
  44. def __init__(self, name, ingredients):
  45. self.name = name
  46. if ingredients is None:
  47. self.ingredients = []
  48. else:
  49. self.ingredients = ingredients
  50. def __repr__(self):
  51. self.ingredients.sort(key=lambda x: x.weight, reverse=True)
  52. ret = f'Пицца {self.name} состоит из:\n'
  53. for ing in self.ingredients:
  54. ret += ing.__repr__() + '\n'
  55. return ret[:-1]
  56. class Ingredient:
  57. def __init__(self, name, weight):
  58. self.name = name
  59. self.weight = weight
  60. def __repr__(self):
  61. return f'{self.name}: {self.weight}г.'
  62. def test_4():
  63. barbecue = Pizza('BBQ', [
  64. Ingredient('chicken', 200),
  65. Ingredient('mozzarella', 300),
  66. Ingredient('sauce bbq', 150),
  67. Ingredient('red onion', 150)
  68. ])
  69. print(barbecue)
  70. def test_5():
  71. ing = [
  72. Ingredient('chicken', 200),
  73. Ingredient('mozzarella', 300),
  74. Ingredient('sauce bbq', 150),
  75. Ingredient('red onion', 150)
  76. ]
  77. ing.sort(key=lambda x: x.weight, reverse=True)
  78. print(ing)
  79. # foo = {x.name: x.weight for x in ing}
  80. # foo2 = sorted(foo.items(), key=lambda item: item[1], reverse=True)
  81. # print(foo)
  82. # print(foo2)
  83. def main():
  84. # test_1()
  85. # test_2()
  86. # test_3()
  87. test_4()
  88. # test_5()
  89. if __name__ == '__main__':
  90. main()