Задачи на ООП в Python. Часть 12
Дан класс:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
Создайте два разных объекта с одинаковыми
значениями свойств. Сравните их через
== и через is. Объясните
результат.
Сделайте функцию compareById, которая
принимает два объекта и возвращает True,
если переменные ссылаются на один и тот же
объект (используйте is).
Сделайте функцию compareByAttrs, которая
принимает два объекта и возвращает True,
если они экземпляры одного класса и у них
одинаковые значения публичных свойств
(сравните __dict__).
Сделайте функцию compare, которая
возвращает 1, если переменные ссылаются
на один объект; 0, если объекты разные,
но одного класса и с теми же свойствами;
-1 в остальных случаях.
Дан класс работника:
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
Сделайте класс EmployeesCollection
с методами add и get. В add
не добавляйте работника, если в коллекции
уже есть объект с такими же свойствами
(сравните через вашу compareByAttrs
или через __dict__).
Проверьте: два разных объекта с одинаковыми именем и зарплатой не должны оба попасть в коллекцию.
Измените логику add: теперь не
добавляйте только тот же самый объект
(сравнение через is). Объекты с
одинаковыми свойствами, но разные по
идентичности, должны добавляться.
Проверьте новую логику: один и тот же объект дважды не добавится, а два разных с одинаковыми данными — добавятся.
Сделайте метод __eq__ в классе
Employee, чтобы == сравнивал
объекты по имени и зарплате.
Перепишите проверку в add через
оператор ==, используя ваш __eq__.