Python Academy · Lektion

Instansmetoder och self

Skriv metoder som arbetar med objektets egna data.

Lektion 3 av 414 steg

Instansmetoder och self är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Introduktion

Instansmetoder arbetar med data i ett specifikt objekt och använder self för att komma åt och ändra dess attribut.

Definiera instansmetoder

def method(self): inuti en klass är en instansmetod. Den tar emot objektet som sitt första 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())

Anropa metoder

obj.method() är syntaktiskt socker för ClassName.method(obj). Python skickar automatiskt 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 som returnerar self

Att returnera self möjliggör metodkedjor: 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)

Privata metoder (konvention)

Prefixera med _ för att signalera ”intern användning”. Prefixet __ utlöser namnmangling: _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 omvandlar en metod till ett lättläst attribut. Inga parenteser behövs vid åtkomst.
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

Ändra tillstånd

Metoder som ändrar self-attribut förändrar objektets tillstånd. Utforma metoder med tydligt syfte: query kontra command.
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())

Jämföra objekt

Som standard jämför == identitet. Implementera __eq__ för att jämföra efter värde.
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))

Iterationsprotokollet

Implementera __iter__ och __next__ för att göra en klass itererbar – så att den kan användas i for-loopar.
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)))

Protokoll för kontexthanterare

Implementera __enter__ och __exit__ för att göra en klass användbar i with-satser.
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

Metod kontra funktion

När Dog.bark nås via klassen är det en vanlig funktion. Via en instans är d.bark en bunden metod – self är redan ifyllt.
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

Snabbkontroll

Vad är metodkedjning, och vad måste en metod returnera för att stödja den?

Sammanfattning

Instansmetoder: def m(self). Anropa som obj.m(). Returnera self för kedjning. __eq__/__iter__/__enter__/__exit__ implementerar protokoll. Prefixet _ signalerar intern användning.

Fortsätt

Utmärkt! Fortsätt till nästa lektion för att fördjupa era kunskaper.
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”Instansmetoder och self” gratis?

Ja – hela texten till ”Instansmetoder och self” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Instansmetoder och self”?

Skriv metoder som arbetar med objektets egna data. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Instansmetoder och self”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Klasser och metoden __init__
  2. Instansattribut kontra klassattribut
  3. Instansmetoder och self
  4. Magiska metoder: __str__ och __repr__
← Tillbaka till Python Academy