Magiske metoder: __str__ og __repr__
Implementer dunder-metoder for lesbare objektrepresentasjoner.
Magiske metoder: __str__ og __repr__ er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva er magiske metoder?
Magiske metoder (dunder-metoder) er spesielle metoder med doble understreker som Python kaller i bestemte sammenhenger, for eksempel ved utskrift eller sammenligning.
class Foo:
def __str__(self):
return "I am Foo"
f = Foo()
print(f) # I am Foo
print(str(f)) # I am Foo__repr__: Representasjon for utviklere
__repr__ bør returnere en entydig streng som helst gjør det mulig å opprette objektet på nytt. Den vises i REPL og brukes av repr().
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point({self.x}, {self.y})"
p = Point(3, 4)
print(repr(p)) # Point(3, 4)__str__: Representasjon for brukere
__str__ gir en streng som er lett å forstå for mennesker. print() og str() kaller den. Hvis den mangler, bruker Python __repr__ som reserve.
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
def __str__(self):
return f"{self.celsius}°C"
def __repr__(self):
return f"Temperature({self.celsius})"
t = Temperature(100)
print(t) # 100°C
print(repr(t)) # Temperature(100)Når hver metode kalles
__str__: print(), str() og f-strenger. __repr__: REPL, repr() og beholdere som viser elementene sine.
class Item:
def __str__(self): return "str"
def __repr__(self): return "repr"
x = Item()
print(x) # str
print([x]) # [repr] ← list uses repr for elements__format__ for tilpasset formatering
Definer __format__ for å styre hvordan f-strenger med formatspesifikasjoner viser objektet ditt.
class Money:
def __init__(self, amount):
self.amount = amount
def __format__(self, spec):
if spec == "usd":
return f"${self.amount:.2f}"
return str(self.amount)
m = Money(9.5)
print(f"{m:usd}") # $9.50__bool__ for sannhetsverdi
__bool__ gjør det mulig å evaluere objektet i boolske sammenhenger. Returner True eller False.
class Bag:
def __init__(self, items):
self.items = items
def __bool__(self):
return len(self.items) > 0
b = Bag([])
if not b:
print("Bag is empty") # Bag is empty__len__ for len()
__len__ gjør at len(obj) fungerer. Den brukes også av __bool__ når __bool__ ikke er definert.
class Stack:
def __init__(self):
self.data = []
def push(self, v): self.data.append(v)
def __len__(self):
return len(self.data)
s = Stack()
s.push(1)
print(len(s)) # 1__eq__ for likhet
Definer __eq__ for å angi hva som gjør to instanser like med ==.
class Vector:
def __init__(self, x, y):
self.x, self.y = x, y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
print(Vector(1,2) == Vector(1,2)) # True__hash__ i kombinasjon med __eq__
Når du definerer __eq__, setter Python __hash__ til None, slik at objektet ikke kan hashes. Definer også __hash__ hvis du trenger objektet i mengder eller ordbøker.
class Point:
def __init__(self, x, y): self.x, self.y = x, y
def __eq__(self, o): return (self.x, self.y) == (o.x, o.y)
def __hash__(self): return hash((self.x, self.y))
pts = {Point(1,2), Point(1,2)}
print(len(pts)) # 1__add__ og aritmetikk
Aritmetiske operatorer tilsvarer dunder-metoder: __add__ for +, __sub__ for - og så videre.
class Vector:
def __init__(self, x, y): self.x, self.y = x, y
def __add__(self, o): return Vector(self.x+o.x, self.y+o.y)
def __repr__(self): return f"Vector({self.x},{self.y})"
print(Vector(1,2) + Vector(3,4)) # Vector(4,6)__getitem__ for indeksering
__getitem__ gjør det mulig for klassen å støtte indeksering med hakeparenteser, for eksempel obj[key].
class Matrix:
def __init__(self, data):
self.data = data
def __getitem__(self, idx):
return self.data[idx]
m = Matrix([[1,2],[3,4]])
print(m[0]) # [1, 2]
print(m[1][0]) # 3Hurtigsjekk
Hvilken dunder-metode kalles når du bruker print(obj)?
Oppsummering
Magiske metoder gir klassene dine Python-typisk oppførsel. __repr__ er rettet mot utviklere, mens __str__ er rettet mot brukere. Definer __eq__, __hash__ og aritmetiske dunder-metoder for å gjøre objektene fullt funksjonelle.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «Magiske metoder: __str__ og __repr__» gratis?
Ja – hele teksten i «Magiske metoder: __str__ og __repr__» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Magiske metoder: __str__ og __repr__»?
Implementer dunder-metoder for lesbare objektrepresentasjoner. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Magiske metoder: __str__ og __repr__»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Klasser og __init__-metoden
- Instansattributter kontra klasseattributter
- Instansmetoder og self
- Magiske metoder: __str__ og __repr__