Friday, December 26, 2008

Python - wywoływanie obiektu

Python umożliwia potraktowanie obiektu jak funkcji, czyli ... wywołania obiektu :) Każdy z was może sam rozważyć taką potrzebę. Widząc jak łatwo obiekt może udawać inne typy (takie jak int, complex czy nawet słownik lub listę), można się zastanowić: skoro obiekt stworzony przez nas tak dobrze może udawać najróżniejsze inne obiekty - dlaczego nie miałby móc udawać funkcji ? To w sumie też obiekt. Tutaj właśnie zaczynają prześwitywać paradygmaty programowania funkcyjnego języka Python :)

A wszystko to w kilku linijkach:
class Klasa(object):

    def __call__(self):
        print "Wywolalem sie ! z wiadomoscia :)"

if __name__ == '__main__':
    obiekt = Klasa()
    obiekt()
Co wynika z powyższego kodu ? Wyposażyliśmy nasz obiekt w metodę __call__. Gdy potem próbujemy wywołać nasz obiekt, potraktować go jak funkcję (fragment obiekt()) python sprawdzi czy istnieje metoda __call__ i jeżeli tak wywoła ją. Metoda ta zachowuje się pod wieloma względami tak jak każa inna funkcja: może przyjmować parametry lub zwracać jakąś wartość :)

No comments: