Zapouzdření v Pythonu

  • Dylan Parker
  • 0
  • 1259
  • 324
>

Úvod

Zapouzdření je jedním ze základních aspektů objektově orientovaného programování. Umožňuje programátorům lepší kontrolu nad tokem dat v jejich programech a tato data chrání. Zapouzdření také dělá objekty do soběstačnějších a nezávisle fungujících částí.
Koncept zapouzdření staví na tom, co jste udělali v posledních dvou průvodcích s třídami a konstruktory. Konstruktory se obvykle používají v úzké spolupráci se zapouzdřením a skutečně pomáhají při bezproblémovém fungování zapouzdření.

Modifikátory přístupu

Než budete moci využít výhod zapouzdření, musíte pochopit, jak Python omezuje přístup k datům uloženým v proměnných a metodách.
Python má různé úrovně omezení, které řídí, jak a odkud lze přistupovat k datům. Proměnné a metody mohou být veřejné, soukromé nebo chráněné. Tato označení jsou tvořena počtem podtržítků před proměnnou nebo metodou.

Veřejnost

Každá proměnná a metoda, které jste dosud viděli, s výjimkou konstruktorů, byly veřejné. Veřejné proměnné a metody lze libovolně upravovat a spouštět odkudkoli, ať už uvnitř nebo vně třídy. Chcete-li vytvořit veřejnou proměnnou nebo metodu, nepoužívejte žádné podtržítka.

Soukromé

Soukromé označení umožňuje přístup k proměnné nebo metodě pouze z vlastní třídy nebo objektu. Hodnotu soukromé proměnné nemůžete změnit zvenčí třídy. Soukromým proměnným a metodám předcházejí dvě podtržítka. Podívejte se na níže uvedený příklad.
__make = 'Dodge'
Zkuste tuto třídu použít dříve. Nastavte proměnné v konstruktoru na soukromé. Po vytvoření instance objektu zkuste vytisknout jednu z proměnných.
 třída Auto (objekt): def __init __ (self, make = 'Ford', model = 'Pinto', year = '1971', najetých kilometrů = '253812', color = 'orange'): self .__ make = make self .__ model = model self .__ year = year self .__ najetých kilometrů = najetých kilometrů .__ color = color def move_forward (self, speed): print ("Your% s is moving forward at% s"% (self .__ model, speed)) def move_backward ( self, speed): print ("Pohyb vzad rychlostí% s"% speed) mycar = Car () print (model mycar .__) 
Zobrazí se chybová zpráva, že proměnná neexistuje. Je to proto, že tato proměnná je soukromá. Nyní zkuste spustit move_forward metoda.
mycar.move_forward
Všechno funguje dobře. Je to proto, že k proměnné přistupuje metoda v rámci třídy, nikoli externě.
Tady je háček. Python nezpracovává přesně chráněné proměnné ani jiné objektově orientované jazyky. Namísto skutečné ochrany proměnných změní jejich název v rámci tlumočníka. To umožňuje vytvářet a existovat různé kopie proměnné. Zkuste změnit jednu z chráněných proměnných ve vašem moje auto objekt a vytiskněte jej.
 mycar .__ model = 'Mustang' tisk (model mycar .__) 
Zdá se, že to nyní funguje, ale to, co jste vytiskli, je podivná kopie chráněné proměnné. Zkuste použít move_forward metoda znovu.
mycar.move_forward
Vytisklo původní hodnotu __Modelka. Proměnné existují nezávisle. Můžete to dále ilustrovat vytištěním objektu jako slovníku. Uvidíte dvě různé proměnné.
tisk (mycar .__ dict__)

Chráněný

Chráněné proměnné a metody jsou velmi podobné soukromým. Pravděpodobně nebudete často používat chráněné proměnné nebo metody, ale stále stojí za to vědět, o co jde. K proměnné, která je chráněna, lze přistupovat pouze prostřednictvím její vlastní třídy a všech tříd z ní odvozených. To je více téma na později, ale mějte na paměti, že pokud používáte třídu jako základ jiné, chráněné proměnné mohou být dobrou volbou. Chráněné proměnné začínají jedním podtržítkem.

Co je zapouzdření

Takže teď, když víte, jak fungují modifikátory přístupu, bude se tato další část zdát docela zřejmá. Zapouzdření je proces používání soukromých proměnných v rámci tříd, aby se zabránilo neúmyslné nebo potenciálně škodlivé úpravě dat. Tím, že obsahuje a chrání proměnné v rámci třídy, umožňuje třídě a objektům, které vytváří, fungovat jako nezávislé, samostatné části fungující ve stroji samotného programu.
Prostřednictvím proměnných zapouzdření a určitých metod lze komunikovat pouze prostřednictvím rozhraní určených samotnou třídou.

Setters a Getters

Rozhraní, která se používají pro interakci s zapouzdřenými proměnnými, se obecně označují jako metody setter a getter, protože se používají k nastavení a načítání hodnot proměnných. Protože metody existují v rámci třídy nebo objektu, jsou schopny přistupovat a upravovat soukromé proměnné, zatímco vy to nebudete moci dělat mimo třídu. Když jste vytvořili instanci svého moje auto objekt, v podstatě jste použili jeho konstruktor jako počáteční metodu setteru. Zkuste napsat sadu metod k nastavení a získání hodnoty jedné z moje auto proměnné.
 def set_model (self, new_model): self .__ model = new_model def get_model (self): return self .__ model 
Může se to zdát jako spousta práce navíc, ale není to vůbec těžké. Obecně řečeno, takto byste měli strukturovat své třídy a pracovat s proměnnými tříd.

Závěrečné myšlenky

Zapouzdření je hlavní součástí objektově orientovaného programování. Je to velká část toho, co dělá objekty v programování výkonnějšími jako fyzické objekty v reálném světě. Slouží také k ochraně dat uložených ve vašich objektech a poskytuje kontrolu a konvence, jak byste měli zpracovávat tok dat do a z tříd.

Cvičení

  1. Vytvořte všechny proměnné v souboru Auto třída soukromá.
  2. Zkuste jeden vytisknout mimo třídu.
  3. Upravte move_forward metoda použití soukromé proměnné Modelka, a zavolej to.
  4. Vytvořte metodu setteru pro jednu z proměnných.
  5. Pomocí metody setter, kterou jste vytvořili, můžete změnit hodnotu proměnné.
  6. Vytvořte metodu getter pro stejnou proměnnou jako metodu setter.
  7. Použijte svou getrovou metodu pro přístup a vytištění této proměnné.



Zatím žádné komentáře

Sbírka užitečných informací o operačním systému Linux a nových technologiích
Nejnovější články, praktické tipy, podrobné recenze a průvodci. Ve světě operačního systému Linux se budete cítit jako doma