Zanurkuj w Pythonie/Metody specjalne: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Nie podano opisu zmian
Linia 79:
'artysta': 'The Cynic Project', 'gatunek': 18}</nowiki>}}
 
# Najpierw tworzymy instancję klasy <code>MP3FileInfo</code> bez podawania nazwy pliku. (Możemy tak zrobić, ponieważ argument <code>filename</code> metody <code>__init__</code> jest opcjonalny.) Ponieważ <code>MP3FileInfo</code> nie posiada własnej metody <code>__init__</code>, Python idzie wyżej po drzewie nadklas i znajduje metodę <code>__init__</code> w klasie <code>FileInfo</code>. Z kolei <code>__init__</code> w tej klasie ręcznie wykonuje metodę <code>__init__</code> w klasie <code>dict</code>, a potem ustawia klucz <code>"plik"</code> na wartość w zmiennej <code>filename</code>, który wynosi <code>None</code>, ponieważ pominęliśmy nazwę pliku. Ostatecznie <code>mp3file</code> początkowo jest słownikiem (a właściwie klasąinstancją klasy potomnąpotomnej słownika) z jednym kluczem <code>"plik"</code>, którego wartość wynosi <code>None</code>.
# Teraz rozpoczyna się prawdziwa zabawa. Ustawiając klucz <code>"plik"</code> w <code>mp3file</code> spowoduje wywołanie metody <code>__setitem__</code> klasy <code>MP3FileInfo</code> (a nie słownika, czyli klasy <code>dict</code>). Z kolei metoda ta zauważa, że ustawiamy klucz <code>"plik"</code> z prawdziwą wartością (<code>item</code> jest prawdą w kontekście logicznym) i wywołuje <code>self.__parse</code>. Chociaż jeszcze nie analizowaliśmy działania metody <code>__parse</code>, możemy na podstawie wyjścia zobaczyć, że ustawia ona kilka innych kluczy jak <code>"album"</code>, <tt>"artysta"</tt>, <code>"gatunek"</code>, <code>u"tytuł"</code> (w unikodzie, bo korzystamy z polskich znaków), <code>"rok"</code>, czy też <code>"komentarz"</code>.
# Kiedy zmienimy klucz <code>"plik"</code>, proces ten zostanie wykonany ponownie. Python wywoła <code>__setitem__</code>, który następnie wywoła <code>self.__parse</code>, a ten ustawi wszystkie inne klucze.