misc.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. '''
  2. Таким образом, разница между __str__ и __repr__ заключается в целях
  3. использования. __str__ предназначен для представления объекта в читаемой
  4. форме, а __repr__ предназначен для представления объекта в точном и воспроизводимом виде.
  5. '''
  6. class Lion:
  7. def __init__(self, name):
  8. self.name = name
  9. '''Как видят объект разработчики'''
  10. def __repr__(self) -> str:
  11. return f'The name Lion - f{self.name}'
  12. '''Как видят объект пользователи. Функции print, str'''
  13. def __str__(self) -> str:
  14. return f'Lion - f{self.name}'
  15. class Person:
  16. def __init__(self, name, surname, gender='male'):
  17. self.name = name
  18. self.surname = surname
  19. if gender not in ['male', 'female']:
  20. print("Не знаю, что вы имели в виду? Пусть это будет мальчик!")
  21. self.gender = 'male'
  22. else:
  23. self.gender = gender
  24. def __str__(self):
  25. if self.gender == 'male':
  26. return f"Гражданин {self.surname} {self.name}"
  27. else:
  28. return
  29. # Метод должен возвращать неотрицательное значение
  30. def __len__(self):
  31. return len(self.name + self.surname)
  32. class MyList:
  33. def __init__(self, elements):
  34. self.elements = elements
  35. def __len__(self):
  36. return len([elem for elem in self.elements if elem % 2 == 0])
  37. class Hero:
  38. def __init__(self) -> None:
  39. pass
  40. def __len__(self):
  41. return(len(self.__dict__))
  42. def __str__(self):
  43. sorted_params = sorted(self.__dict__.items(), key=lambda item: item[0])
  44. params = ''
  45. for item in sorted_params:
  46. params += f'{item[0]}: {item[1]}\n'
  47. params = params[:len(params)-1]
  48. return params
  49. class MyAtr:
  50. def __init__(self, name, surname) -> None:
  51. self.name = name
  52. self.surname = surname
  53. def __str__(self) -> str:
  54. for key, value in self.__dict__.items():
  55. print(key, value)
  56. return "hello"
  57. '''Математические методы'''
  58. class BankAccount:
  59. def __init__(self, name, balance):
  60. print('new_object init')
  61. self.name = name
  62. self.balance = balance
  63. def __repr__(self):
  64. return f"Клиент {self.name} с балансом {self.balance}"
  65. def __add__(self, other):
  66. print('__add__ call')
  67. if isinstance(other, BankAccount):
  68. return self.balance + other.balance
  69. if isinstance(other, (int, float)):
  70. return BankAccount(self.name, self.balance + other)
  71. raise NotImplemented
  72. def __radd__(self, other):
  73. print('__radd__ call')
  74. return self + other
  75. def __mul__(self, other):
  76. print('__add__ call')
  77. if isinstance(other, BankAccount):
  78. return self.balance * other.balance
  79. if isinstance(other, (int, float)):
  80. return self.balance * other
  81. if isinstance(other, str):
  82. return self.name + other
  83. raise NotImplemented
  84. def main():
  85. hero = Hero()
  86. assert len(hero) == 0
  87. hero.health = 50
  88. hero.damage = 10
  89. assert len(hero) == 2
  90. assert str(hero) == '''damage: 10
  91. health: 50'''
  92. hero.weapon = ['sword', ' bow']
  93. hero.skill = 'Некромант'
  94. assert str(hero) == '''damage: 10
  95. health: 50
  96. skill: Некромант
  97. weapon: ['sword', ' bow']'''
  98. print(hero)
  99. villain = Hero()
  100. assert str(villain) == ''
  101. assert len(villain) == 0
  102. villain.level = 15
  103. villain.skill = 'Боец'
  104. villain.armor = 25
  105. assert len(villain) == 3
  106. assert str(villain) == '''armor: 25
  107. level: 15
  108. skill: Боец'''
  109. print(villain)
  110. # at = MyAtr('Ivan', 'Ivanov')
  111. # print(at)
  112. # hero = Hero()
  113. # print(len(hero))
  114. '''
  115. lion = Lion('Simba')
  116. print(lion) # __str__
  117. print(lion) # __str__
  118. '''
  119. # my_list = MyList([1, 2, 3, 4, 5, 6, 7])
  120. # print(len(my_list))
  121. if __name__ == '__main__':
  122. main()