Třídy Pythonu jsou základním pojmem. Je základem standardní knihovny, práce nejoblíbenějších programů a samotného jazyka. Pokud se chcete stát více než novým programátorem, musíte pochopit podstatu a princip práce s třídami a objekty.
Jaké jsou třídy
Jedná se o základní programovou součást PLO. V Pythonu se třídy používají k implementaci nových typů objektů a jsou vytvořeny pomocí speciální třídy instrukcí. Zevnitř se podobají standardním vloženým datovým typům, jako jsou čísla nebo sekvence. Ale v objektech třídy existuje významný rozdíl - zachování dědictví.
Objektově orientované programování na Pythonu je zcela založeno na hierarchickém dědictví tříd. Jedná se o univerzální způsob přizpůsobení a opětovného použití kódu. Ale objektově orientovaný přístup není povinný. Python nemá žádný problém umožňující pouze programové a funkční programování. Hlavním úkolem tříd v Pythonu je datový paket a spustitelný kód. Jsou syntakticky podobné výkazu def. Stejně jako funkce vytvářejí své jmenné prostory, které lze opakovaně volat z libovolné části programu. Proč je tedy potřebuje? Třídy jsou silnějším a všestrannějším nástrojem. Většina jejich potenciálu je odhalena v době vzniku nových objektů.
Význam tříd a princip dědění
Každý objekt má svůj vlastní jmenný prostor, který lze naprogramovat, zadat proměnné avytvořte libovolné funkce. Existují také atributy zděděné z objektu class.attribute. To je význam OOP.
Díky dědictví vzniká strom hierarchie. V praxi to je následující. Když se interpret narazí výraz object.attribute, že začne hledat první výskyt zadaného atributu ve třídě. Nepřiřazujeme zjistit, Larry pokračuje hledání všechny související třídy, které jsou ve stromu výše, zleva doprava. Vyhledávací strom obsahuje:
superclasses, které jsou na vrcholu hierarchie a implementují obecné chování; podtřídy - jsou níže; kopií - prvky programu s zděděným chováním.Na obrázku je strom tříd Pythonu. Příklad ukazuje, že třídy 2 a 3 jsou superclassy. V dolní části jsou dvě kopie instance 1 a 2 ve střední - třída do třídy 1. Pokud napíšete výraz Instance2.w, bude to dělat tlumočníka vzhled .w hodnotu atributu takto:
instance2; třída 1; třída 2; Třída3.Název .w bude nalezen ve třídě nadřazené třídy. Na terminologii OOP to znamená, že instance 2 "dědí" atribut .w Class3. Upozorňujeme, že kopie obrazu zdědí jen čtyři atributy: .w, .x, .y .z:
Za kopie Instance1.x a atribut Instance2.x nalezen .x Class 1, kde hledání se zastaví do třídy 1 strom je nižší než třídy 2. Instance1.y a atribut Instance2.y nalezen .y třída 1, kde se vyhledávání zastaví, protože to je jediné místo, kde se objeví. U instancí Instance1.z a Instance2.z bude tlumočník nalezen .z Class 2protože je umístěn ve stromu vlevo než Class3. V případě instance2 se atribut name .name nachází v instanci instance2 bez hledání stromu.Předposlední bod je nejdůležitější. To ukazuje, jak třídy 1 přepíše atribut .x, .x nahrazení nadřazené verzi třídy 2.
,
a metodika kopie
OOP provozuje dvě hlavní koncepce: Třídy a objekty. Třídy vytvářejí nové typy a objekty třídy v Pythonu jsou jejich instancemi. Například všechny celočíselné proměnné patří typu int. V jazyce OOP jsou to instance třídy int. Třídy jsou vytvářeny instrukcemi a objekty voláním. Mohou ukládat data a mají své vlastní funkce nebo třídní metody. Terminologie hraje v Pythonu důležitou roli. Programátoři s pomocí pomáhají rozlišovat nezávislé funkce od těch, které patří do tříd. Proměnné, které odkazují na objekty, se nazývají pole. V PLO existují dva typy polí. První je proměnná patřící do celé třídy, druhá je proměnná jednotlivých instancí. Políčka a metody společně tvoří atributy třídy. V Pythonu jsou napsány v bloku kódu po třídě klíčových slov.
Metody a hodnoty samy
Metody jsou funkce s dalším vlastním jménem. Přidá se na začátek seznamu možností. Pokud chcete, aby proměnná mohla být nazvána jiným jménem, taková iniciativa mezi programátory není vítána. Vlastní je standard, snadno rozpoznatelný v kódovém jménu. Některé vývojové prostředí byly navíc navrženy tak, aby s ním spolupracovaly. Chcete-li lépe porozumět významu sebe v OOP, představte si, že máme třídu s názvem ClassA a methodA:
třída ClassA; def metodaA (vlastní, argument1 argument2).objectA objekt je instancí Classa a volání metody takto:
objectA.methodA (arg1 arhument2).Když interpret uvidí tento krok, automaticky převádí takto: ClassA.methodA (objectA, argument1 argument2). To znamená, že instance třídy využívá vlastní proměnnou jako odkaz na sebe.
Jak vytvořit proměnné, metody a instance třídy
rozebrat nabídne praktický příklad interaktivní shell Python. Vytvoření třídu "ЭksperymentPervыy" začíná instrukce třídy komponent:
třída ЭksperymentPervыy def setinf (self, hodnota): # vytvořit první metodu s argumenty self.data = hodnoty [41 ]def zobrazení (self): # druhá metoda tisk (self.data) # tisknout kopie dat.Po ústupu by mělo být povinné jednotka s připojenými pokyny def, který představuje objekty jsou přiřazeny názvy a setinf displej. S jejich pomocí jsou vytvořeny atributy ExperimentPrivy.setinf a ExperimentPrivy.display. Ve skutečnosti se jakýkoli název, který přiřadí hodnotu do nejvyšší úrovně ve vnořeném bloku, stává atribut. Chcete-li zjistit, jak metody pracují, musíte vytvořit dvě instance:
x = Experiment First () # Dvě kopie jsou vytvořeny; y = ExperimentPerfect () # Každý je samostatný obor názvů.Nejprve vzorky neukládají žádné informace a jsou zcela prázdné. Ale oni jsou příbuzní s jejich třídou:
x.setinf ("Teach Python") # Zavolejte metodu, ve které self-x. y.setinf (314) # Ekvivalentní: ЭksperymentPervыy.setinf (y, 314)Je-li ve jménu kopiíx, y platí pro atribut třídy objektu .setinf ЭksperymentPervыy, při hledání dědické dřevo tlumočníka vrátí atribut třídy.
x.display () # na hodnoty X a Y jejich self.data učení Python y.display (), 314.(52 )
Operátory s přetížením
V Pythonu mohou třídy překročit zatížení operátorů. Tato možnost vytváří kopie podobné vestavěným datovým typům. Proces je implementovat metody se speciálními názvy, které začínají a končí dvojitým podtržením. Zvažte v akci __init__ a __sub__. První metoda se nazývá konstruktor třídy. V nástroji Python __init__ provádí operaci vytváření kopie. Druhá metoda __sub__ provádí operaci odčítání.
Třída přetížení: # vytvořit novou třídu def __init __ (self, spuštění): self.data = start def __sub __ (self, jiné): # mínus další kopie vratné přetížení (self.data - ostatní) # výsledkem bude nová instance A = přetížení#__ init __ (A, 10)
B = A - 2 #__ sub __ (B, 2) B. údaje #B - nová instance přetížení 8. Detaily metodu __init__
Způsob __init__ nejčastěji používaná při práci s třídami. Je nepostradatelná pro inicializaci různých objektů. __init__ volání odděleně. Při vytváření nové instance metoda automaticky přijímá argumenty uvedené v závorkách. Pomocí metod přetížení lze provádět jakoukoli operaci s vloženými datovými typy. Většina z nich se používá pouze při řešení zvláštních úkolů, při nichž je třeba objektysimulace chování standardních objektů. Metody jsou zděděny z superclassů a nejsou povinné. V počátečních fázích je snadné bez nich. Ale pro úplné ponoření do programování a podstaty PLO potřebujete dovednosti práce s operátory.
Způsob __getitem__
Způsob provádí přetížení __getitem__ přístupový prvek indexu. Pokud by se dědí nebo přítomné v definici třídy, pak je indexována každá transakce interpreter ho automaticky zavolá. Například, když se objeví kopie F v extrakční prvku exprese s indexem, jako je f [i], Python interpret je __getitem__ metoda, objekt F míjí první argument index uvedený v závorkách v druhém. Další třída "PrymerYndeksatsyy" vrátí čtverec indexu:
, třída PrymerYndeksatsyy def __getitem __ (self, index): vratné index ** 2 F = PrymerYndeksatsyy () F # exprese f [i] je F .__ GetItem __ (i)