Enkapsulacja Pythona

Enkapsulacja Pythona

Wstęp

Enkapsulacja jest jednym z podstawowych aspektów programowania obiektowego. Umożliwia programistom lepszą kontrolę nad przepływem danych w swoich programach i chroni te dane. Enkapsulacja sprawia, że ​​obiekty w bardziej samowystarczalne i niezależne funkcjonujące elementy.

Pojęcie enkapsulacji opiera się na tym, co zrobiłeś w dwóch ostatnich przewodnikach z klasami i konstruktorami. Konstruktorzy są zwykle stosowane w bliskiej kondycji z enkapsulacją i faktycznie pomagają w płynnej pracy enkapsulacji.

Modyfikatory dostępu

Zanim będziesz mógł skorzystać z enkapsulacji, musisz zrozumieć, w jaki sposób Python ogranicza dostęp do danych przechowywanych w zmiennych i metodach.

Python ma różne poziomy ograniczeń, które kontrolują sposób dostępu do danych i skąd. Zmienne i metody mogą być publiczne, prywatne lub chronione. Oznaczenia te są wykonywane przez liczbę podkreśleń przed zmienną lub metodą.

Publiczny

Każda zmienna i metoda, którą widziałeś do tej pory, z wyjątkiem konstruktorów, były publiczne. Zmienne i metody publiczne można swobodnie modyfikować i działać z dowolnego miejsca, wewnątrz klasy lub poza. Aby utworzyć zmienną publiczną lub metodę, nie używaj żadnych podkreśleń.

Prywatny

Prywatne oznaczenie umożliwia jedynie dostęp do zmiennej lub metody z własnej klasy lub obiektu. Nie możesz zmodyfikować wartości zmiennej prywatnej spoza klasy. Prywatne zmienne i metody są poprzedzone dwoma podkoszulkami. Spójrz na poniższy przykład.

__make = „Dodge”

Spróbuj użyć tej klasy z wcześniej. Ustaw zmienne w konstruktorze na prywatny. Następnie spróbuj wydrukować jedną ze zmiennych po utworzeniu obiektu.

Class Car (Object): def __init __ (self, make = 'ford', model = 'pinto', rok = '1971', przebieg = '253812', color = 'Orange'): self '): self'): self '): self'): self.__make = sam siebie.__model = model samego.__year = rok.__mileage = jaźń przebieg.__color = Color def Movem_Forward (Self, Speed): Print („Twój %s idzie naprzód w %s” %(jaźń.__Model, prędkość)) def Movem_backward (self, prędkość): drukuj („przesuwa się wstecz w % s” % prędkość) myCar = car () print (mycar.__Model) 

Otrzymasz komunikat o błędzie stwierdzający, że zmienna nie istnieje. Jest tak, ponieważ ta zmienna jest prywatna. Teraz spróbuj uruchomić pójść naprzód metoda.

mój samochód.pójść naprzód

Wszystko dziala. To dlatego, że zmienna jest dostępna metodą w klasie, a nie zewnętrznie.

Jest tu haczyk. Python nie obsługuje dokładnie zmiennych chronionych, a także innych języków obiektowych. Zamiast faktycznie chronić zmienne, zmienia ich nazwę w interpreterie. Pozwala to na tworzenie różnych kopii zmiennej. Spróbuj zmienić jedną z chronionych zmiennych w Twoim mój samochód obiekt i wydrukowanie.

mój samochód.__Model = „Mustang” (MyCar.__Model) 

Teraz wydaje się, że działa, ale to, co wydrukowałeś, to dziwna kopia zmiennej chronionej. Spróbuj użyć pójść naprzód Metoda ponownie.

mój samochód.pójść naprzód

Wydrukował oryginalną wartość __Model. Zmienne istnieją niezależnie. Możesz to zilustrować, drukując obiekt jako słownik. Zobaczysz dwie różne zmienne.

Drukuj (mycar.__dict__)

Chroniony

Zmienne i metody chronione są bardzo podobne do prywatnych. Prawdopodobnie nie będziesz często używać chronionych zmiennych ani metod, ale nadal warto wiedzieć, kim one są. Zmienna, która jest chroniona. To bardziej temat na później, ale pamiętaj, że jeśli używasz klasy jako podstawy innej, zmienne chronione mogą być dobrą opcją. Zmienne chronione zaczynają się od jednego podkreślenia.

Co to jest enkapsulacja

Więc teraz, gdy wiesz, jak działają modyfikatory dostępu, ta następna część będzie wydawała się dość oczywista. Enkapsulacja to proces stosowania zmiennych prywatnych w klasach w celu zapobiegania niezamierzonej lub potencjalnie złośliwej modyfikacji danych. Uwzględniając i chroniąc zmienne w klasie, umożliwia klasę i obiekty, które tworzy do funkcjonowania jako niezależne, samodzielne, części funkcjonujące w maszynie samego programu.

Poprzez zmienne enkapsulacyjne i niektóre metody można oddziaływać tylko poprzez interfejsy oznaczone przez samą klasę.

Setters and Getters

Interfejsy używane do interakcji ze zmiennymi kapsułkowanymi są ogólnie określane jako metody settera i getter, ponieważ są używane do ustawiania i pobierania wartości zmiennych. Ponieważ metody istnieją w klasie lub obiektu, są one w stanie uzyskać dostęp i modyfikowanie zmiennych prywatnych, podczas gdy nie będziesz w stanie tego zrobić spoza klasy. Kiedy utworzyłeś instancję mój samochód obiekt, zasadniczo użyłeś jego konstruktora jako metody początkowej setter.

Spróbuj napisać zestaw metod ustawiania i uzyskania wartości jednego z mój samochód zmienne.

def set_model (self, new_model): self.__model = new_model def get_model (self): powrót self.__Model 

Może się to wydawać dużo dodatkowej pracy, ale tak naprawdę nie jest to trudne. Ogólnie rzecz biorąc, w ten sposób powinieneś konstruować zajęcia i pracować ze zmiennymi klasowymi.

Zamykanie myśli

Enkapsulacja jest główną częścią programowania zorientowanego na obiekt. To duża część tego, co sprawia, że ​​obiekty w programowaniu działają bardziej jak obiekty fizyczne w prawdziwym świecie. Służy również do ochrony danych przechowywanych w twoich obiektach oraz zapewnia kontrolę i konwencje, w jaki sposób należy obsługiwać przepływ danych w klasach.

Ćwiczenia

  1. Zrobić wszystkie zmienne w Samochód klasa prywatna.
  2. Spróbuj wydrukować jeden spoza klasy.
  3. Zmodyfikuj pójść naprzód metoda używania zmiennej prywatnej Model, i nazwij to.
  4. Utwórz metodę settera dla jednej ze zmiennych.
  5. Użyj metody setter, którą utworzyłeś, aby zmienić wartość zmiennej.
  6. Utwórz metodę Getter dla tej samej zmiennej, co metoda settera.
  7. Użyj metody Getter, aby uzyskać dostęp i wydrukować tę zmienną.

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Jak zbudować aplikację Tkinter za pomocą obiektu zorientowanego na…
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Mastering Bash Script Loops
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
  • Rzeczy do zainstalowania na Ubuntu 22.04
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Ubuntu 20.04 Przewodnik
  • Podstawy matematyki komputerowej: binarny, dziesiętny, sześciokadcica, ośmiorot