0Pricing
Python Academy · Lekcja

Metody instancji i self

Proszę pisać metody operujące na danych należących do danego obiektu.

Metody instancji i self to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Wprowadzenie

Metody instancji operują na danych konkretnego obiektu, używając self do uzyskiwania dostępu do jego atrybutów i ich modyfikowania.

Definiowanie metod instancji

def method(self): wewnątrz klasy to metoda instancji. Otrzymuje obiekt jako pierwszy 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())

Wywoływanie metod

obj.method() to skrócony zapis składniowy ClassName.method(obj). Python automatycznie przekazuje obj jako self.
class Dog:
    def __init__(self, name): self.name = name
    def bark(self): print(f'{self.name} says Woof!')
Dog('Rex').bark()

Metody zwracające self

Zwracanie self umożliwia łańcuchowe wywoływanie metod: 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)

Metody prywatne (konwencja)

Prefiks _ sygnalizuje „użytek wewnętrzny”. Prefiks __ uruchamia zmianę nazwy (name mangling): _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)

Właściwości jako metody

@property zmienia metodę w atrybut, który można odczytywać. Podczas uzyskiwania dostępu nie trzeba używać nawiasów.
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

Modyfikowanie stanu

Metody modyfikujące atrybuty self zmieniają stan obiektu. Metody należy projektować z jasnym przeznaczeniem: zapytanie albo polecenie.
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())

Porównywanie obiektów

Domyślnie == porównuje tożsamość obiektów. Aby porównywać wartości, należy zaimplementować __eq__.
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))

Protokół iteracji

Zaimplementowanie __iter__ i __next__ sprawia, że klasa staje się iterowalna — można jej używać w pętlach for.
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)))

Protokół menedżera kontekstu

Zaimplementowanie __enter__ i __exit__ sprawia, że klasy można używać w instrukcjach with.
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

Metoda a funkcja

Przy dostępie przez klasę Dog.bark jest zwykłą funkcją. Przy dostępie przez instancję d.bark jest metodą związaną — self jest wstępnie uzupełniony.
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

Szybkie sprawdzenie

Czym jest łańcuchowe wywoływanie metod i co musi zwracać metoda, aby je obsługiwać?

Podsumowanie

Metody instancji: def m(self). Wywołuj je jako obj.m(). Zwracaj self, aby umożliwić łańcuchowe wywoływanie. __eq__/__iter__/__enter__/__exit__ implementują protokoły. Prefiks _ sygnalizuje użytek wewnętrzny.

Kontynuuj

Doskonale! Proszę przejść do następnej lekcji, aby pogłębić swoje umiejętności.

Często zadawane pytania

Czy lekcja „Metody instancji i self” jest bezpłatna?

Tak — pełny tekst „Metody instancji i self” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Metody instancji i self”?

Proszę pisać metody operujące na danych należących do danego obiektu. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Metody instancji i self”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klasy i metoda __init__
  2. Atrybuty instancji a atrybuty klasy
  3. Metody instancji i self
  4. Metody magiczne: __str__ i __repr__
← Powrót do Python Academy