Zanurkuj w Pythonie/Obiekty i klasy: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
Piotr (dyskusja | edycje)
Linia 193:
 
{{Infobox|
tekst=Instrukcja <tt>pass</tt> w Pythonie jest analogiczna do pustego zbioru nawiasów klamrowych ({}) w Javie lub języku C++.
}}
 
Linia 207:
 
{{Infobox|
tekst=W Pythonie przodek danej klasy jest wyszczególnioniony w nawiasach okrągłych, umieszczonych bezpośrednio po nazwie naszej klasy. Python nie posiada specjalnego słowa kluczowego jak np. <tt>extends</tt> w Javie.}}
 
Python obsługuje dziedziczenie wielokrotne. Wystarczy w nawiasach okrągłych, umiejscowionych zaraz po nazwie klasy wstawić nazwy klas z których chcemy dziedziczyć i oddzielić je przecinkami np. <tt>class klasa(klasa1,klasa2)</tt>.
 
=== Initializowanie i kodowanie klas ===
 
Ten przykład pokazuje <tt>initializację</tt> klasy <tt>FileInfo</tt> za pomocą metody <tt>__init__</tt>.
 
 
<big> '''Przykład 5.5. Initializator the FileInfo Class''' </big>
class FileInfo(UserDict):
"store file metadata" #(1)
def __init__(self, filename=None): #(2) (3) (4)
 
# Klasy mogą (a nawet powinny) posiadać także pewien tekst dokumentacyjny (ang. doc string), podobnie jak moduły i funkcje.
# Metoda <tt>__init__</tt> jest wywoływana bezpośredniu po utworzeniu instancji klasy. Może kusić aby nazwać ją konstruktorem klasy, co jednak nie jest prawdą. Metoda <tt>__init__</tt> wygląda podobnie do konstruktora (z reguły <tt>__init__</tt> jest pierwszą metodą definiowaną dla klasy), działa podobnie (jest pierwszym fragmentem kodu wykonywanego w nowo utworzonej instancji klasy) a nawet podobnie przmi (słowo „init” sugeruje, że jest to konstruktor). Niepoprawne, ponieważ obiekt jest już utworzony przed wywołaniem metody <tt>__init__</tt>, a my już posiadamy poprawną referencję do świeżo utworzonego obiektu. Jednak <tt>__init__</tt> jest najbliższą rzaczą, która przypomina konstruktor w Pythonie, ponadto pełni taką samą rolę.
# Pierwszy argument każdej metody znajdującej się w klasie, włączając w to <tt>__init__</tt>, jest zawsze referencja do bieżącej instancji naszej klasy. Według powszechnej konwencji, argument ten jest zawsze nazywany <tt>self</tt>. W metodzie <tt>__init__</tt> <tt>self</tt> odwołuje się do właśnie utworzonego obiektu; w innych metdoach klasy, odwołuje się do instancji, z której wywoływaliśmy metodę. Mimo, że musisz wyraźnie określić <tt>self</tt> podczas definiowania metody, nie określasz go w czasie wywoływania metody; Python dodaje go automatycznie.
# Motoda <tt>__init__</tt> może posiadać dowolną liczbę argumentów i podobnie jak w funkcjach, argumenty mogą być zdefiniowane z domyślnymi wartościami (i w ten sposób stają się argumentami opcjonarnymi). W tym przypadku argument <tt>filename</tt> ma domyślną wartość okreśłoną jako <tt>None</tt>, który jest Pythonową pustą wartością (czyli null).
 
{{Infobox|
Według konwencji, pierwszy argument metody należącej do pewnej klasy (referencja do bieżącej instancji klasy) jest nazywana <tt>self</tt>. Argument ten pełni ten samą rolę, co zastrzeżone słowo <tt>this</tt> w C++ czy Javie, ale <tt>self</tt> nie jest zastrzeżonym słowem w Pythonie (zależy to od konwencji nazw). Niemniej lepiej zostać przy tej konwencji, ponieważ jest to wręcz bardzo silna umowa.}}
 
== Tworzenie instacji klas ==