# Magiske metoder er metoder med dobbel understrek foran og bak, som kalles indirekte. # De skal aldri kalles eksplisitt, men heller kalles ved ? skrive noe annet. # Feks kalles konstrukt?ren til en klasse hver gang man oppretter en instans av klassen # uten at man skriver __init__ class Person: # Kalles n?r man oppretter en ny instans av klassen # Har ingen returverdi def __init__(self, alder, h?yde): self._alder = alder self._h?yde = h?yde # M? ha hent-metoder for ? kunne hente ut instansvariablene vi trenger til sammenlininger def hent_alder(self): return self._alder def hent_h?yde(self): return self._h?yde # Kalles n?r man bruker == til ? sammenligne to objekter av klassen # Returnerer en boolsk verdi def __eq__(self, annen): # Hvis 'self' == 'annen' -> True # Ellers -> False if (self._alder == annen.hent_alder()) and (self._h?yde == annen.hent_h?yde()): return True return False # Kalles n?r man vil konvertere objektet til en streng # For eksempel print(objekt) eller str(objekt) # Returnerer en streng def __str__(self): return self._navn # Kalles n?r man bruker < for ? sammenligne to objekter av klassen # Returnerer en boolsk verdi def __lt__(self, annen): # Hvis 'self' er mindre enn 'annen' -> True # Ellers -> False if self._alder < annen.hent_alder(): return True return False #return self._alder < annen._alder # Kalles n?r man bruker <= for ? sammenligne to objekter av klassen # Returnerer en boolsk verdi def __le__(self, annen): # Hvis dette objektet (self) er minst, eller de er like store -> True # Ellers -> False return self._alder <= annen.hent_alder() # def __lt__(self, annen) < # def __le__(self, annen) <= # def __gt__(self, annen) > # def __ge__(self, annen) >= person1 = Person(20, 180) person2 = Person(20, 180) person3 = person1 print(person1 == person2) # True print(person1 is person2) # False print(person1 is person3) # True print(person1 == person3) # True