Python Academy · leksjon

Instansmetoder og self

Skriv metoder som opererer på objektets egne data.

Leksjon 3 av 414 trinn

Instansmetoder og self er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 3 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.

Introduksjon

Instansmetoder opererer på dataene til et bestemt objekt og bruker self til å få tilgang til og endre attributtene.

Definere instansmetoder

def method(self): inne i en klasse er en instansmetode. Den mottar objektet som det første argumentet (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())

Kalle metoder

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

Metoder som returnerer self

Når en metode returnerer self, kan du kjede sammen metodekall: 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 (konvensjon)

Sett _ først for å signalisere «intern bruk». Hvis du setter __ først, utlø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)

Egenskaper som metoder

@property gjør en metode om til et attributt som er lett å lese. Du trenger ikke parenteser ved tilgang.
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

Endre tilstand

Metoder som endrer self-attributter, endrer objektets tilstand. Utform metoder med en tydelig hensikt: spørring 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())

Sammenligne objekter

Som standard sammenligner == identitet. Implementer __eq__ for å sammenligne etter verdi.
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))

Iterasjonsprotokollen

Implementer __iter__ og __next__ for å gjøre en klasse itererbar, slik at den kan brukes 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)))

Protokollen for kontekstbehandlere

Implementer __enter__ og __exit__ for å gjøre en klasse mulig å bruke i with-setninger.
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 kontra funksjon

Når Dog.bark hentes via klassen, er det en vanlig funksjon. Via en instans er d.bark en bundet metode – self er forhåndsutfylt.
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

Hurtigsjekk

Hva er metodekjeding, og hva må en metode returnere for å støtte det?

Oppsummering

Instansmetoder: def m(self). Kall dem som obj.m(). Returner self for kjeding. __eq__/__iter__/__enter__/__exit__ implementerer protokoller. Prefikset _ signaliserer intern bruk.

Fortsett

Utmerket! Fortsett til neste leksjon for å mestre det neste konseptet.
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 «Instansmetoder og self» gratis?

Ja – hele teksten i «Instansmetoder og self» 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 «Instansmetoder og self»?

Skriv metoder som opererer på objektets egne data. 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 3 av 4.

Hvor lang tid tar leksjonen «Instansmetoder og self»?

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