W tym samouczku omówimy koncepcję abstrakcji w Pythonie dla podejścia programowania obiektowego.
Zasadniczo abstrakcja skupia się na ukrywaniu wewnętrznych implementacji procesu lub metody przed użytkownikiem. W ten sposób użytkownik wie, co robi, ale nie wie, jak wykonywana jest praca.
& nbsp;
Co to jest abstrakcja w Pythonie?
Na przykład ludzie nie myślą o samochodzie jako o zbiorze tysięcy pojedynczych części. Zamiast tego postrzegają go jako dobrze zdefiniowany obiekt z własnym unikalnym zachowaniem. Ta abstrakcja pozwala ludziom prowadzić samochód bez świadomości złożoności części, z których się składa. Mogą zignorować szczegóły przekładni silnika i układów hamulcowych. Zamiast tego mogą używać całego obiektu.
Potężny sposób na manipulowanie abstrakcją i stosowanie klasyfikacji hierarchicznej. To pozwala nam nakładać semantykę złożonych systemów na warstwy, dzieląc je na łatwiejsze do zarządzania fragmenty. Na zewnątrz samochód jest pojedynczym obiektem. Po wejściu do środka widać, że samochód składa się z kilku podsystemów: układu kierowniczego, hamulców, systemu audio, pasów bezpieczeństwa itp. Z kolei każdy z tych podsystemów składa się z mniejszych bloków.
Chodzi o to, że jedziemy samochód (lub inny złożony system) wykorzystujący abstrakcje hierarchiczne.
Może to być również zastosowane do programów komputerowych wykorzystujących koncepcje OOP. To jest esencja programowania obiektowego.
Klasy i metody abstrakcyjne w Pythonie
Aby zadeklarować klasę abstrakcyjną, najpierw musimy zaimportować moduł abc
. Spójrzmy na przykład.
z abc importuj ABC class abs_class (ABC): #abstract methods
Tutaj abs_class
&jest to streszczenie klasa, w której można zdefiniować metody abstrakcyjne lub dowolne inne metody.
Jako właściwość klasy abstrakcyjne mogą mieć dowolną liczbę metod abstrakcyjnych, współistniejących z dowolną liczbą innych metod. Na przykład widzimy poniżej.
z abc import ABC, abstractmethod class abs_class (ABC): #normalna metoda def metoda (self): # definicja metody @abstractmethod def Abs_method (self): #Abs_method definition
Tutaj metoda ()
&normalna metoda, podczas gdy Abs_method ()
&metoda abstrakcyjna, która implementuje @abstractmethod
z modułu abc.
Przykład
Teraz, gdy wiemy już o abstrakcyjnych klasach i metodach, spójrzmy na przykład.
z abc import ABC, abstractmethod class Absclass (ABC): def print (self, x): print ("Passed value:", x) @abstractmethod def task (self): print ("Jesteśmy wewnątrz zadania klasy Abs") class test_class (Absclass): def task (self): print ("Jesteśmy w zadaniu test_class") class example_class (Absclass): zadanie def (self ): print ("Jesteśmy w zadaniu przykładowej_klasy") #obiekt klasy testowej utworzony test_obj = test_class () test_obj.task () test_obj.print (100) #obiekt klasy przykładowej utworzony ex ample_obj = example_class () example_obj.task ( ) example_obj .print (200) print („test_obj jest instancją klasy Absclass?”, isinstance (test_obj, Absclass)) print („example_obj jest instancją klasy Absclass?”, isinstance (example_obj, Absclass))
Dane wyjściowe:
gdzie,
task()
oraz metodę print()
, które są widoczne dla użytkownika. Pozostałe dwie klasy odziedziczone z tej klasy abstrakcyjnej to &to test_class
i example_class
. Obie mają własną metodę task()
(rozszerzenie metody abstrakcyjnej).
Po utworzeniu przez użytkownika obiektów z klas test_class i example_class oraz wywołaniu metody task()
dla obu tych metod, ukryte definicje metod task()
w obu klasach wchodzą w grę. Te definicje są ukryte przed użytkownikiem. Abstrakcyjna metoda task()
z klasy abstrakcyjnej Absclass
nigdy nie jest faktycznie wywoływana.
Ale gdy print()
metoda jest wywoływana tak jak w przypadku test_obj i example_obj, wywoływana jest metoda print()
Absclass, ponieważ nie jest to metoda abstrakcyjna.
Uwaga: nie możemy utworzyć instancji klasy abstrakcyjnej . Powoduje to błąd.