Python Academy · Lektion

Instansmetoder og self

Skriv metoder, der arbejder med objektets egne data.

Lektion 3 af 414 trin

Instansmetoder og self er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.

Introduktion

Instansmetoder arbejder på dataene i et bestemt objekt og bruger self til at tilgå og ændre dets attributter.

Definition af instansmetoder

def method(self): inde i en klasse er en instansmetode. Den modtager objektet som det første argument (self).
class Circle:
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(5).area())

Kald af metoder

obj.method() er syntaktisk sukker for ClassName.method(obj). Python sender automatisk obj som self.
class Dog:
    def __init__(self, name): self.name = name
    def bark(self): print(f'{self.name} says Woof!')
Dog('Rex').bark()

Metoder, der returnerer self

Hvis du returnerer self, kan du kæde metoder sammen: builder.set_name('x').set_age(3).build().
class Builder:
    def __init__(self): self.data = {}
    def set(self, k, v):
        self.data[k] = v
        return self
    def build(self): return self.data
result = Builder().set('x',1).set('y',2).build()
print(result)

Private metoder (konvention)

Sæt _ foran for at signalere intern brug. Hvis du sætter __ foran, udløses navneforvanskning: _ClassName__method.
class Account:
    def __init__(self, bal): self._bal = bal
    def _validate(self, amount): return amount > 0
    def deposit(self, amount):
        if self._validate(amount):
            self._bal += amount
a = Account(100)
a.deposit(50)
print(a._bal)

Egenskaber som metoder

@property omdanner en metode til en attribut, der er let at læse. Du behøver ikke parenteser, når du tilgår den.
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

Ændring af tilstand

Metoder, der ændrer self-attributter, ændrer objektets tilstand. Design metoder med en tydelig hensigt: forespørgsel eller kommando.
class Stack:
    def __init__(self): self.items = []
    def push(self, x): self.items.append(x)
    def pop(self): return self.items.pop()
    def peek(self): return self.items[-1]
s = Stack()
s.push(1); s.push(2)
print(s.pop(), s.peek())

Sammenligning af objekter

Som standard sammenligner == identitet. Implementer __eq__ for at sammenligne værdi.
class Point:
    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(Point(1,2)==Point(1,2))

Iterationsprotokollen

Implementer __iter__ og __next__ for at gøre en klasse iterérbar, så den kan bruges i for-løkker.
class Countdown:
    def __init__(self, n): self.n = n
    def __iter__(self): return self
    def __next__(self):
        if self.n <= 0: raise StopIteration
        self.n -= 1; return self.n + 1
print(list(Countdown(3)))

Kontekststyringsprotokollen

Implementer __enter__ og __exit__ for at gøre en klasse anvendelig i with-sætninger.
class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self
    def __exit__(self, *args):
        import time
        print(f'elapsed: {time.time()-self.start:.3f}s')
with Timer(): pass

Metode eller funktion

Når Dog.bark tilgås via klassen, er det en almindelig funktion. Via en instans er d.bark en bundet metode, hvor self allerede er udfyldt.
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

Hurtig kontrol

Hvad er metodekædning, og hvad skal en metode returnere for at understøtte den?

Opsummering

Instansmetoder: def m(self). Kald dem som obj.m(). Returnér self for at kæde metoder sammen. __eq__/__iter__/__enter__/__exit__ implementerer protokoller. Præfikset _ signalerer intern brug.

Fortsæt

Fremragende! Fortsæt til næste lektion for at udbygge dine færdigheder.
Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
76
Lektioner
320

Ofte stillede spørgsmål

Er lektionen “Instansmetoder og self” gratis?

Ja — hele teksten til “Instansmetoder og self” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Instansmetoder og self”?

Skriv metoder, der arbejder med objektets egne data. Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Python Academy?

Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Instansmetoder og self”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Python Academy-lektion?

Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

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