Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
boost_python [2008/04/16 07:16] kamituel |
boost_python [2008/04/16 07:22] kamituel |
||
---|---|---|---|
Linia 115: | Linia 115: | ||
</code> | </code> | ||
Potrzebujemy sppecjalnego wrappera dla ''Costam_0'' ponieważ twórcy biblioteki uznali, że najlepiej jest gdy pisząc moduł Pythona nie musimy modyfikować istniejącego kodu C++.\\ Wrapper ten nie robi właściwie nic oprócz wołania odpowiedniej metody. Warto zauważyć, że potrzebujemy go tylko dlatego, że klasa ''Costam_0'' posiada czysto wirtualną metodę.\\ | Potrzebujemy sppecjalnego wrappera dla ''Costam_0'' ponieważ twórcy biblioteki uznali, że najlepiej jest gdy pisząc moduł Pythona nie musimy modyfikować istniejącego kodu C++.\\ Wrapper ten nie robi właściwie nic oprócz wołania odpowiedniej metody. Warto zauważyć, że potrzebujemy go tylko dlatego, że klasa ''Costam_0'' posiada czysto wirtualną metodę.\\ | ||
- | W definicji modułu widzimy, że najpierw deklarujemy chęć udostępnienia klasy - jako nazwę podajemy jednak nazwę modułu! Klasa ta widoczna będzie w Pythonie pod nazwą ''Costam0'' i będzie posiadała jedną metodę. Następnie definiujemy funkcję ''metoda'' zaznaczając, że jest ona czysto wirtualną składową klasy. | + | W definicji modułu widzimy, że najpierw deklarujemy chęć udostępnienia klasy - jako nazwę podajemy jednak nazwę klasy wrappera! Klasa ta widoczna będzie w Pythonie pod nazwą ''Costam0'' i będzie posiadała jedną metodę. Następnie definiujemy funkcję ''metoda'' zaznaczając, że jest ona czysto wirtualną składową klasy. |
Zajmijmy się teraz klasą ''Costam_A''. Dziedziczy ona po ''Costam_0''. Aby ją udostępnić, musimy dopisać poniższy kod w ramach bloku BOOST_PYTHON_MODULE: | Zajmijmy się teraz klasą ''Costam_A''. Dziedziczy ona po ''Costam_0''. Aby ją udostępnić, musimy dopisać poniższy kod w ramach bloku BOOST_PYTHON_MODULE: | ||
Linia 190: | Linia 190: | ||
#b.x_ro = "To sie nie zapisze!" | #b.x_ro = "To sie nie zapisze!" | ||
</code> | </code> | ||
+ | Po uruchomieniu naszym oczom ukaże się: | ||
+ | <code>$ ./p2.py | ||
+ | AAA A aaa | ||
+ | BBB B bbb | ||
+ | CCC C ccc | ||
+ | BBB B bbb ++ PLUS DZIALA | ||
+ | Zapisalo sie! | ||
+ | Zapisalo sie! | ||
+ | </code> | ||
+ | Widzimy więc, że wszystkie elementy działają poprawnie. Co więcej - po odkomentowaniu niektórych fragmentów - np. próby zapisania do zmiennej tylko do odczytu ''x_ro'' interpreter poinformuje nas o błędzie: | ||
+ | <code>$ ./p2.py | ||
+ | AAA A aaa | ||
+ | BBB B bbb | ||
+ | CCC C ccc | ||
+ | BBB B bbb ++ PLUS DZIALA | ||
+ | Zapisalo sie! | ||
+ | Zapisalo sie! | ||
+ | Traceback (most recent call last): | ||
+ | File "./p2.py", line 39, in <module> | ||
+ | b.x_ro = "To sie nie zapisze!" | ||
+ | AttributeError: can't set attribute | ||
+ | </code> | ||
==== Z życia wzięte ==== | ==== Z życia wzięte ==== |