11.10. Operator Comparison¶
in
- contains
11.10.1. SetUp¶
>>> from functools import reduce
11.10.2. About¶
Operator |
Method |
---|---|
|
|
|
|
11.10.3. Object Equality¶
When you compare objects with the same fields from two different classes
Always remember to compare classes
This way you avoid bug, when both has the same fields and values
Eq Works at Both Sides
>>> class Fruit:
... def __init__(self, name):
... self.name = name
>>>
>>>
>>> a = Fruit('Apple')
>>> b = Fruit('Apple')
>>>
>>> a == b
False
>>> class Fruit:
... def __init__(self, name):
... self.name = name
...
... def __eq__(self, other):
... return self.name == other.name
>>>
>>>
>>> a = Fruit('Apple')
>>> b = Fruit('Apple')
>>>
>>> a == b
True
>>> class Fruit:
... def __init__(self, name):
... self.name = name
...
... def __eq__(self, other):
... return self.name == other.name
>>>
>>>
>>> class Company:
... def __init__(self, name):
... self.name = name
>>>
>>>
>>> a = Fruit('Apple')
>>> b = Fruit('Apple')
>>> c = Company('Apple')
>>>
>>> a == b
True
>>>
>>> a == c
True
>>> class Fruit:
... def __init__(self, name):
... self.name = name
...
... def __eq__(self, other):
... return self.__class__ is other.__class__ \
... and self.name == other.name
>>>
>>>
>>> class Company:
... def __init__(self, name):
... self.name = name
>>>
>>>
>>> a = Fruit('Apple')
>>> b = Fruit('Apple')
>>> c = Company('Apple')
>>>
>>> a == b
True
>>>
>>> a == c
False
Eq Works at Both Sides:
>>> class Fruit:
... def __init__(self, name):
... self.name = name
>>>
>>>
>>> class Company:
... def __init__(self, name):
... self.name = name
...
... def __eq__(self, other):
... return self.__class__ is other.__class__ \
... and self.name == other.name
>>>
>>>
>>> a = Fruit('Apple')
>>> b = Fruit('Apple')
>>> c = Company('Apple')
>>>
>>> a == b
False
>>>
>>> a == c
False
11.10.4. Assignments¶
"""
* Assignment: Operator Comparison Equals
* Complexity: easy
* Lines of code: 3 lines
* Time: 5 min
English:
1. Override operator for code to work correctly
2. Do not use `dataclasses`
3. Run doctests - all must succeed
Polish:
1. Nadpisz operator aby poniższy kod zadziałał poprawnie
2. Nie używaj `dataclasses`
3. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> class Car:
... def __init__(self, year, name):
... self.year = year
... self.name = name
>>> Mission(2035, 'Ares 3') == Car(2035, 'Ares 3')
False
>>> Mission(2035, 'Ares 3') == Mission(2035, 'Ares 3')
True
>>> Mission(2035, 'Ares 3') == Mission(1973, 'Apollo 18')
False
>>> Mission(2035, 'Ares 3') == Mission(2035, 'Apollo 18')
False
>>> Mission(2035, 'Ares 3') == Mission(1973, 'Ares 3')
False
"""
class Mission:
def __init__(self, year, name):
self.year = year
self.name = name