RkBlog

Hardware, programming and astronomy tutorials and reviews.

Klasy

Klasy są podstawowym narzędziem do tworzenia struktur danych i programowania obiektowego. Instrukcja class pozwala definiować własne klasy:
class Koszyk:
	def __init__ (self):
		self.koszyk = []

	def dodaj(self, obiekt):
		self.koszyk.append(obiekt)

	def rozmiar(self):
		return len(self.koszyk)
Pierwszy argument każdej metody - "self" - przekazuje do każdej metody (funkcji zdefiniowanej wewnątrz klasy) instancję klasy na jakiej ma operować (jest to po prostu zmienna o umownej nazwie, którą interpreter obsługuje w specjalny sposób). Metody poprzedzone __ to metody specjalne, np __init__ jest wykonywana przy utworzeniu instancji klasy. Instancje powstają w wyniku wywołania obiektu klasy:
moj_koszyk = Koszyk() # stworzenie instancji klasy
moj_koszyk.dodaj("pierwszy wpis")
moj_koszyk.dodaj("drugi wpis")
print(moj_koszyk.rozmiar())
Po utworzeniu nowej instancji klasy jej atrybuty i metody dostępne są za pomocą operatora kropki (w naszym przypadku zmienna "moj_koszyk" przechowuje instancję naszej klasy tak więc stosujemy "moj_koszyk.metoda_klasy"). Wewnętrznie każda instancja jest implementowana przy użyciu słownika __dict__ zawierającego unikatowe informacje o każdej instancji:
class koszyk:
	def __init__ (self):
		self.koszyk = []
	def dodaj(self,obiekt):
		self.koszyk.append(obiekt)
	def rozmiar(self):
		return len(self.koszyk)

s = koszyk()
s.dodaj("pierwszy wpis")
s.dodaj("drugi wpis")
print(s.__dict__)
Tak jak w przypadku funcji można dodawać atrybuty, które pojawią się w słowniku __dict__:
s.atrybut = 'wartość'

Dziedziczenie

Dziedziczenie to mechanizm tworzenia nowych klas modyfikujących już istniejące klasy. Oryginalna klasa nazywa się klasą bazową lub superklasą, zaś nowa nazywana jest klasą pochodną lub podklasą. Klasa potomna dziedziczy wszystkie atrybuty klasy bazowej. Dziedziczenie zapisuje się w instrukcji klas za pomocą listy oddzielonych przecinkami klas bazowych:
class Produkt:
	ilosc = 0

	def ustaw_ilosc(self, ilosc):
		self.ilosc = ilosc

class Pomidor(Produkt):
	opis = 'swieże pomidory z syberii'
	
p = Pomidor()
p.ustaw_ilosc(11)
print(p.ilosc)
print(p.opis)
W powyższym przykładzie klasa "Pomidor" dziedziczy po klasie "Produkt" zyskując dostęp do metod i atrybutów dziedziczonej klasy.
RkBlog

Podstawy Pythona, 14 July 2008, Piotr Maliński

Comment article