Właściwie temat był już poruszany w wątku, w którym napisałem kilka słów o wyłapywaniu wyjątków.
Ponieważ zarówno w przypadku metod jak i funkcji nie trzeba definiować typu obiektów, które są do nich przekazywane wszystkie metody zachowują się tak jakby były wirtualne. Choć ciężko o tym mówić przy braku deklaracji typu parametru - po prostu są wywoływane na obiekcie przekazanym do funkcji czy metody jaki by ten obiekt nie był. Tak zwany polimorfizm najlepiej zobaczyć we wspomnianym już powyżej przykładzie wyłapywania wyjątków. Wyłapując wyjątek klasy bazowej możemy obsługiwać tym samym blokiem również wszystkie wyjątki klas pochodzących od niej (pochodnych). W C++ wymaga to użycia funkcji wirtualnych :] (jak można zobaczyć tutaj). Python po prostu - tak działa :) Jest to jego naturalne zachowanie, o które nie musimy w żaden sposób zabiegać.
Showing posts with label polimorfizm. Show all posts
Showing posts with label polimorfizm. Show all posts
Monday, December 22, 2008
Polimorfizm w Pythonie
Ostatnio programując w C++ walczyłem z polimorficznymi wyjątkami. Sytuacja zgrała się z trafieniem po drodze na lekturę Thinking in Python, gdzie zauważyłem bardzo ciekawe podejście autora, który czasami pisze "w C++ musiałeś to i to a w Pythonie - po prostu działa". Szalenie mi to podejście odpowiada :) Tak więc w myśl tej idei postanowiłem sprawdzić jak ma się polimorfizm wyjątków w Pythonie i czy dużo więcej się namęcze. Po raz kolejny :) punkt za prostotę dla Pythona - po prostu działa :]
Czy to nie jest piękne :)
class MyException(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return repr(self.message)
class MySocketException(MyException):
pass
class MyOtherException(MyException):
pass
def f():
raise MyOtherException("Moj wyjatek: Wystapil straszny blad !")
if __name__ == '__main__':
try:
f()
except MyException, e:
print e
Czy to nie jest piękne :)
Subscribe to:
Posts (Atom)