Python Academy · leksjon

Magiske metoder: __str__ og __repr__

Implementer dunder-metoder for lesbare objektrepresentasjoner.

Leksjon 4 av 413 trinn

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])  # 3

Hurtigsjekk

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.

Gratis å komme i gang

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

  1. Klasser og __init__-metoden
  2. Instansattributter kontra klasseattributter
  3. Instansmetoder og self
  4. Magiske metoder: __str__ og __repr__
← Tilbake til Python Academy