Programowanie i projektowanie obiektowe

Podobne dokumenty
Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

Programowanie obiektowe

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Programowanie i projektowanie obiektowe

Kurs rozszerzony języka Python

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Programowanie i projektowanie obiektowe

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie i projektowanie obiektowe

Wstęp do programowania

Programowanie i projektowanie obiektowe

Wstęp do programowania

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Programowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Zaawansowany kurs języka Python

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Środowisko programisty

Programowanie obiektowe

Materiały do zajęć VII

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wstęp do programowania

Programowanie obiektowe

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe - 1.

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie obiektowe

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Oracle PL/SQL. Paweł Rajba.


Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Programowanie obiektowe

Programowanie obiektowe

Zaawansowany kurs języka Python

Język Java część 2 (przykładowa aplikacja)

Kurs WWW. Paweł Rajba.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Technologie obiektowe

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Programowanie współbieżne i rozproszone

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Języki i techniki programowania Ćwiczenia 2

Wykład 8: klasy cz. 4

Programowanie obiektowe zastosowanie języka Java SE

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Zaawansowany kurs języka Python

Wstęp do programowania

Wstęp do programowania

Diagramy klas. dr Jarosław Skaruz

Wykład 4: Klasy i Metody

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie Obiektowe i C++

Metaprogramowanie w Ruby

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Wzorce projektowe. dr inż. Marcin Pietroo

Szablony funkcji i klas (templates)

Wstęp do programowania

1 Atrybuty i metody klasowe

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Spis treści. Wprowadzenie 15

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Programowanie Obiektowe i C++ Marcin Benke

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie Obiektowe i C++

Programowanie obiektowe

Programowanie Obiektowe i C++

Rozdział 4 KLASY, OBIEKTY, METODY

Oprogramowanie w eksperymentach fizyki. Wykład 4, Paweł Staszel

Podstawy Programowania Obiektowego

Common Lisp - funkcje i zmienne

Wykład 0 Informacje Podstawowe

PHP 5 język obiektowy

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Język Python (3) Język Python (3) 1/35

Zaawansowany kurs języka Python

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs rozszerzony języka Python

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Kurs rozszerzony języka Python

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wstęp. Ale po co? Implementacja

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

Podstawy programowania obiektowego

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Język Java część 2 (przykładowa aplikacja)

Programowanie obiektowe

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Elementy języka Scheme

Modelowanie i Programowanie Obiektowe

Transkrypt:

Programowanie i projektowanie obiektowe Metaprogramowanie (w Pythonie) Paweł Daniluk Wydział Fizyki Jesień 2016 P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 1 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe 3 pętle P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe 3 pętle 4 funkcje i procedury P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe 3 pętle 4 funkcje i procedury 5 klasy i moduły P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe 3 pętle 4 funkcje i procedury 5 klasy i moduły 6 makrodefinicje (takie jak w C w zasadzie nie należą do języka) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe 3 pętle 4 funkcje i procedury 5 klasy i moduły 6 makrodefinicje (takie jak w C w zasadzie nie należą do języka) 7 wzorce (C++), klasy generyczne (Java) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Języki programowania są jak cebula 1 instrukcje proste (przypisania, wywołania funkcji bibliotecznych,...) 2 instrukcje warunkowe 3 pętle 4 funkcje i procedury 5 klasy i moduły 6 makrodefinicje (takie jak w C w zasadzie nie należą do języka) 7 wzorce (C++), klasy generyczne (Java) Każda kolejna warstwa pozwala skrócić kod programu i ułatwia pracę programisty. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 2 / 32

Wstęp ideologiczny Sytuacja idealna Język programowania specjalnie dostosowany do rozwiązywanego problemu. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 3 / 32

Wstęp ideologiczny Sytuacja idealna Język programowania specjalnie dostosowany do rozwiązywanego problemu. Rozwiązanie Funkcje i klasy dające możliwie prosty sposób wyrażania operacji na reprezentacjach przetwarzanych informacji. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 3 / 32

Wstęp ideologiczny Sytuacja idealna Język programowania specjalnie dostosowany do rozwiązywanego problemu. Rozwiązanie Funkcje i klasy dające możliwie prosty sposób wyrażania operacji na reprezentacjach przetwarzanych informacji. Smutna rzeczywistość Programowanie to w dużej części rzemiosło. Często występują problemy podobne do siebie. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 3 / 32

Wstęp ideologiczny Sytuacja idealna Język programowania specjalnie dostosowany do rozwiązywanego problemu. Rozwiązanie Funkcje i klasy dające możliwie prosty sposób wyrażania operacji na reprezentacjach przetwarzanych informacji. Smutna rzeczywistość Programowanie to w dużej części rzemiosło. Często występują problemy podobne do siebie. Rozwiązanie Programy do automatycznego generowania innych programów. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 3 / 32

Python jest językiem refleksyjnym wykonywany program jest traktowany jak dane. Przykładowe funkcje type(), isinstance(), callable(), dir(), getattr(), eval(), exec() P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 4 / 32

Można i tak... d ef f ( i ) : d e f r e s ( s e l f ) : p r i n t i r e t u r n r e s c l a s s A( o b j e c t ) : f o r i i n range ( 1 0 ) : exec ( f +s t r ( i )+ =f ( +s t r ( i )+ ) ) A ( ). f 1 ( ) A ( ). f 3 ( ) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 5 / 32

Metody statyczne i klasowe przypomnienie c l a s s s t a t i c m e t h o d ( o b j e c t ) : d e f init ( s e l f, f ) : s e l f. f = f d e f get ( s e l f, obj, o b j t y p e=none ) : r e t u r n s e l f. f c l a s s classmethod ( o b j e c t ) : d e f init ( s e l f, f ) : s e l f. f = f d e f get ( s e l f, obj, k l a s s=none ) : i f k l a s s i s None : k l a s s = type ( o b j ) d e f newfunc ( a r g s ) : r e t u r n s e l f. f ( k l a s s, a r g s ) r e t u r n newfunc P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 6 / 32

@dekoratory Metody statyczne (i klasowe) można tworzyć korzystając z klas staticmethod i classmethod. c l a s s A( o b j e c t ) : d e f f ( ) : pass f=s t a t i c m e t h o d ( f ) d e f g ( c l s ) : pass g=classmethod ( g ) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 7 / 32

@dekoratory c.d. Ale zazwyczaj stosuje się zapożyczoną z Javy składnię. c l a s s A( o b j e c t ) : @ s t a t i c m e t h o d def f ( ) : pass @ classmethod def g ( c l s ) : pass P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 8 / 32

@dekoratory c.d. Napis: @ d e k o r a t o r d ef f ( arg ) :... oznacza: d ef f ( arg ) :... f=d e k o r a t o r ( f ) Dekorator funkcji jest funkcją, która jako argument bierze funkcję dekorowaną i zwraca zmodyfikowaną funkcję. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 9 / 32

@dekoratory c.d. Przykład d ef bread ( f u n c ) : d e f wrapper ( ) : p r i n t " </ \ > " f u n c ( ) p r i n t "<\ />" r e t u r n wrapper d ef i n g r e d i e n t s ( f u n c ) : d e f wrapper ( ) : p r i n t "#tomatoes#" f u n c ( ) p r i n t "~ s a l a d ~" r e t u r n wrapper d ef sandwich ( food=" ham " ) : p r i n t food P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 10 / 32

@dekoratory c.d. Przykład sandwich ( ) #o u t p u t s : ham sandwich = bread ( i n g r e d i e n t s ( sandwich ) ) sandwich ( ) #o u t p u t s : #</ \ > # #tomatoes# # ham # ~ s a l a d ~ #<\ /> P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 11 / 32

@dekoratory c.d. @bread @ i n g r e d i e n t s d ef sandwich ( food=" ham " ) : p r i n t food sandwich ( ) #o u t p u t s : #</ \ > # #tomatoes# # ham # ~ s a l a d ~ #<\ /> P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 12 / 32

@dekoratory c.d. Kolejność ma znaczenie @ i n g r e d i e n t s @bread d ef strange_sandwich ( food=" ham " ) : p r i n t food strange_sandwich ( ) #o u t p u t s : ##tom ato es# #</ \ > # ham #<\ /> # ~ s a l a d ~ P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 13 / 32

@dekoratory przekazywanie argumentów d ef a_decorator_passing_arguments ( f u n c t i o n _ t o _ d e c o r a t e ) : d e f a_wrapper_accepting_arguments ( arg1, arg2 ) : p r i n t " I got a r g s! Look : ", arg1, arg2 f u n c t i o n _ t o _ d e c o r a t e ( arg1, arg2 ) r e t u r n a_wrapper_accepting_arguments @ a_ decorator_ passing_ arguments d ef print_full_name ( first_name, last_name ) : p r i n t "My name i s ", first_name, last_name print_full_name ( " P e t e r ", "Venkman" ) # o u t p u t s : #I got a r g s! Look : P e t e r Venkman #My name i s P e t e r Venkman Przy dekoratorach stosowanych do dowolnych funkcji używa się *args, **kwargs. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 14 / 32

@dekoratory przekazywanie argumentów do dekoratora d ef wrap_in_tag ( tag ) : d e f d e c o r a t o r ( f u n c ) : d e f wrapper ( args, kwargs ) : r e t u r n <%(tag ) s>%(r v ) s </%(tag ) s> % ({ tag : tag, r v : f u n c ( args, kwargs ) } ) r e t u r n wrapper r e t u r n f a c t o r y @wrap_in_tag ( b ) @wrap_in_tag ( i ) d ef say ( v a l ) : r e t u r n v a l p r i n t say ( h e l l o ) Funkcja wrap_in_tag zwraca dekorator, który dokłada do wyniku dekorowanej funkcji zadany tag XML. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 15 / 32

Klasy również można dekorować d ef addid ( o r i g i n a l _ c l a s s ) : o r i g _ i n i t = o r i g i n a l _ c l a s s. init d e f init ( s e l f, id, args, kws ) : s e l f. id = i d s e l f. g e t I d = g e t I d o r i g _ i n i t ( s e l f, args, kws ) o r i g i n a l _ c l a s s. init = init r e t u r n o r i g i n a l _ c l a s s @addid c l a s s Foo : pass P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 16 / 32

Konstruktory i inicjalizatory Metoda new new jest metodą statyczną, która jako pierwszy argument bierze klasę obiektu, który ma zostać stworzony. Pozostałe argumenty są przekazywane do inicjalizatora. Metoda init init jest wywoływana po new. Metoda call Tworząc klasę (np. A()) wywołujemy metodę call, która wywołuje po kolei new i init. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 17 / 32

Konstruktory i inicjalizatory - c.d. Przykład I n [ 1 ] : c l a s s A( o b j e c t ) :... : def init ( s e l f ) :... : s e l f. x = 1... : I n [ 2 ] : a1 = A( ) I n [ 3 ] : a1. x Out [ 3 ] : 1 I n [ 4 ] : a2 = A. new (A) I n [ 5 ] : a2 Out [ 5 ] : < main. A a t 0 x10434b750> P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 18 / 32

Konstruktory i inicjalizatory - c.d. Przykład I n [ 6 ] : a2. x A t t r i b u t e E r r o r Traceback ( most r e c e n t c a l l l a s t ) <i p y t h o n input 6 ecef1d046d23 > i n <module >() > 1 a2. x A t t r i b u t e E r r o r : A o b j e c t has no a t t r i b u t e x I n [ 7 ] : a2. init ( ) I n [ 8 ] : a2. x Out [ 8 ] : 1 P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 19 / 32

Metoda new c l a s s GimmeFive ( o b j e c t ) : d e f new ( c l s, args, kwargs ) : r e t u r n 5 Zastosowania 1 Tworzenie obiektu innej klasy. 2 Wykonanie operacji, które nie mogą zależeć od implementacji init w podklasach. P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 20 / 32

Metoda new - przykład c l a s s Operator ( o b j e c t ) : d e f new ( c l s, op, args, kwargs ) : i f op == + : r e t u r n s u p e r ( Operator, c l s ). new ( Add ) e l i f op == : r e t u r n s u p e r ( Operator, c l s ). new ( Mul ) d e f init ( s e l f, op, arg1, arg2 ) : s e l f. arg1 = arg1 s e l f. arg2 = arg2 c l a s s Add ( Operator ) : d e f e v a l ( s e l f ) : r e t u r n s e l f. arg1 + s e l f. arg2 c l a s s Mul ( Operator ) : d e f e v a l ( s e l f ) : r e t u r n s e l f. arg1 s e l f. arg2 P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 21 / 32

Metoda new przykład I n [ 2 ] : Operator ( +, 3, 4) Out [ 2 ] : <Add at 0 x1071a5790> I n [ 3 ] : Operator ( +, 3, 4 ). e v a l Out [ 3 ] : <bound method Add. e v a l o f <Add o b j e c t at 0 x1071a5b90>> I n [ 4 ] : Operator ( +, 3, 4 ). e v a l ( ) Out [ 4 ] : 7 I n [ 5 ] : Operator (, 3, 4 ). e v a l ( ) Out [ 5 ] : 12 P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 22 / 32

Metaklasy (Lasciate ogni speranza) Klasy są obiektami: klasy type new-style classes klasy types.classtype classic classes P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 23 / 32

Metaklasy (Lasciate ogni speranza) Klasy są obiektami: klasy type new-style classes klasy types.classtype classic classes W zasadzie nic nie stoi na przeszkodzie, aby klasy były obiektami dowolnej klasy (metaklasy). Jaki jest z tego pożytek? sianie zamętu i zniechęcenia kontrola tworzenia klasy (metody new i init ) kontrola tworzenia obiektów klasy (metoda call ) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 23 / 32

Metaklasy c.d. Metaklasa danej klasy jest określona przez: atrybut metaclass metaklasa jednej z klas bazowych zmienna globalna metaclass types.classtype Tworzenie klasy skutkuje wywołaniem metaklasy: M( name, bases, d i c t ) gdzie: name nazwa klasy bases klasy bazowe dict elementy klasy P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 24 / 32

Tworzenie (Python 3.0) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 25 / 32

Metaklasy c.d. c l a s s Meta ( type ) : d e f init ( c l s, name, bases, d i c t ) : p r i n t " D e f i n i o w a n a k l a s a : ", c l s p r i n t "o nazwie : ", name p r i n t " d z i e d z i c z y z : ", b a s e s p r i n t "o elementach : ", d i c t type. init ( c l s, name, bases, d i c t ) d e f call ( c l s, args, kwargs ) : p r i n t " Tworze o b i e k t k l a s y : ", c l s r e t u r n type. call ( c l s, args, kwargs ) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 26 / 32

Metaklasy c.d. I n [ 1 0 ] : c l a s s A( o b j e c t ) :.... : metaclass = Meta.... : d e f m( s e l f ) :.... : p r i n t " Jestem m".... : D e f i n i o w a n a k l a s a : <c l a s s main. A > o nazwie : A d z i e d z i c z y z : (<type o b j e c t >,) o elementach : { m : <f u n c t i o n m at 0 x10e3c0de8 >, module : I n [ 1 1 ] : A( ) Tworze o b i e k t k l a s y : <c l a s s main. A > Out [ 1 1 ] : < main. A at 0 x10e3b8e50> P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 27 / 32

Metaklasy c.d. Przykład automatyczne tworzenie properties c l a s s autoprop ( type ) : d e f init ( c l s, name, bases, d i c t ) : s u p e r ( autoprop, c l s ). init ( name, bases, d i c t ) p r o p s = {} f o r member i n d i c t. k e y s ( ) : i f member. s t a r t s w i t h ( "_get_" ) or member. s t a r t s w i t h ( "_set_" ) : p r o p s [ member [ 5 : ] ] = 1 f o r prop i n p r o p s. k e y s ( ) : f g e t = g e t a t t r ( c l s, "_get_%s " % prop, None ) f s e t = g e t a t t r ( c l s, "_set_%s " % prop, None ) s e t a t t r ( c l s, prop, p r o p e r t y ( f g e t, f s e t ) ) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 28 / 32

Metaklasy c.d. Zastosowanie I n [ 2 9 ] : c l a s s A( o b j e c t ) :.... : metaclass = autoprop.... : d e f _get_x ( s e l f ) :.... : p r i n t "_get_x".... : r e t u r n a. x.... : d e f _set_x ( s e l f, x ) :.... : p r i n t "_set_x".... : s e l f. x = x.... : I n [ 3 0 ] : a = A( ) I n [ 3 1 ] : a. x = 5 set_x I n [ 3 2 ] : a. x get_x get_x Out [ 3 2 ] : 5 P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 29 / 32

Reguły poszukiwania atrybutów instancji (Python 3.0) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 30 / 32

Reguły poszukiwania atrybutów klas (Python 3.0) P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 31 / 32

Metaklasy potencjalne zastosowania Dekoratory, które są dziedziczone Automatyczne uzupełnianie klasy o deskryptory Rejestr definiowanych klas Prawdziwe sigletony P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 32 / 32