Zrozumieć, że self wskazuje bieżący obiekt, wiąże metodę z konkretną instancją i dlaczego jest jawny.
W C++/Java bieżący obiekt kryje się pod ukrytym this.
Python czyni to powiązanie jawnym: każda metoda instancji dostaje jako pierwszy parametr
referencję do wywołującego obiektu. Nazwa self to konwencja, nie słowo kluczowe.
class Counter:
def __init__(self) -> None:
self.value = 0
def increment(self) -> int:
self.value += 1
return self.valueWywołanie c.increment() to syntaktyczny cukier na Counter.increment(c):
c = Counter()
c.increment() # wywołanie przez obiekt
Counter.increment(c) # wywołanie przez klasę — identyczny efektKażdy obiekt ma własną kopię atrybutów instancji:
a = Counter()
b = Counter()
a.increment()
a.increment()
b.increment()
print(a.value) # 2
print(b.value) # 1 — stany niezależne!Diagram: diagrams/topic_03.png
class Broken:
def __init__(self):
value = 0 # lokalna zmienna, nie atrybut!
def get(self):
return self.value # AttributeError!Plik: examples/self_usage.py
class Counter:
def __init__(self) -> None:
self.value = 0
def increment(self) -> int:
self.value += 1
return self.value
def add_many(self, n: int) -> int:
self.value += n
return self.value- Uruchom
examples/self_usage.py. - Stwórz dwa liczniki; zwiększ każdy inną liczbę razy i sprawdź niezależność stanów.
- Dodaj metodę
reset()— zerujeself.value. - Usuń
selfz sygnaturyincrementi sprawdź, co wypisze Python. - Napisz test jednostkowy sprawdzający, że dwa liczniki nie wpływają na siebie.
- Student rozumie mechanizm wiązania metody z instancją.
- Student umie wytłumaczyć, dlaczego
selfjest jawny w Pythonie.
- szablon:
exercises/tasks.py - przykładowe rozwiązanie:
exercises/solutions_03.py - testy:
exercises/test_solutions.py
Zadanie: dopisz metodę add_many(self, n: int) -> int do klasy Counter.
- Dlaczego
selfw Pythonie jest parametrem jawnym? - Co oznacza „wiązanie metody z instancją" w praktyce?
- Jaka jest różnica między
c.increment()aCounter.increment(c)? - Dlaczego dwie instancje tej samej klasy mają niezależny stan?
- Jakie błędy pojawiają się przy pominięciu
selfw ciele metody?
