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

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Piotr (dyskusja | edycje)
→‎Tworzenie instacji klas: kolejna porcja materiału
Linia 249:
Metoda <tt>__init__</tt> jest opcjonalna, lecz jeśli ją definiujesz, musisz pamiętać o wywołaniu metody <tt>__init__</tt>, która należy do przodka klasy. W szczególności, jeśli potomek chce poszerzyć pewne zachowanie przodka, odpowiednia metoda potomka musi w odpowiednim miejscu bezpośrednio wywoływać metodę należącą do przodka, oczywiście z odpowiednimi argumentami.}}
 
== Tworzenie instacjiInitializowanie klas ==
Initializowanie klasy jest dosyć proste. W tym celu wywołujemy klasę tak jak by była funkcją, dodając odpowiednie argumenty, które są określone w metodzie <tt>__init__</tt>. Zwracaną wartością będzie zawsze nowo utworzony obiekt.
class:
 
<h5>Przykład 5.7. Tworzenie instacji klasy FileInfo</h5>
 
>>> import fileinfo
>>> f = fileinfo.FileInfo("/music/_singles/kairo.mp3") #(1)
>>> f.__class__ #(2)
<class fileinfo.FileInfo at 010EC204>
>>> f.__doc__ #(3)
'store file metadata'
>>> f #(4)
{'name': '/music/_singles/kairo.mp3'}
 
# Utworzyliśmy instancję klasy FileInfo (zdefiniowaną w module <tt>fileinfo</tt>) i przypisaliśmy właśnie utworzony obiekt do zmiennej <tt>f</tt>. Użyliśmy jednego parametru <tt>/music/_singles/kairo.mp3</tt>, który będzie odpowiadał za argument <tt>filename</tt> w metodzie <tt>__init__</tt> klasy FileInfo.
# Każda instancja pewnej klasy ma wbudowany atrybut <tt>__class__</tt>, który jest klasą danego obiektu. (Dodajmy, że ta reprezentacja dołancza fizyczny adres instancji na moim komputerze, na twoim reprezentacja będzie się różniła) Programiści Javy mogą być zaznajnajomieni z klasą <tt>Class</tt>, która posiada metody takie jak <tt>getName</tt> czy <tt>getSuperclass</tt>, aby pobrać metadane o pewnym obiekcie. W Pythonie, dziecko metadadanych jest dostępne bezpośrednio z obiektu wykorzystując atrybuty takie jak <tt>__class__</tt>, <tt>__name__</tt>, czy <tt>__bases__</tt>.
# Możesz pobrać notkę dokumentacyjną w podobny sposób jak funkcję czy moduł. Wszystkie instancje klasy mają taką samą informację.
# Pamiętamy, że metoda <tt>__init__</tt> przypisuje argument <tt>filename</tt> do self["name"]? W tym miejscu mamy wynik. Argumenty podawane podczas tworzenia instancji pewnej klasy zostają wysyłane do metody <tt>__init__</tt> (poza referencją do obiektu (argument, który nazwaliśmy <tt>self</tt>), Python zrobił to za nas).
 
{{Infobox|
W Pythonie, aby utworzyć instancję pewnej klasy, wywołujemy klasę, jakby to była zwykła funkcja zwracająca pewną wartość. Python nie posiada jakiegoś kluczowego słowa jakim jest np. operator <tt>new</tt> w Javie czy C++.
}}
 
== Exploring UserDict: A Wrapper Class ==