Object-Oriented Programming na Pythone: Triedy, popis a funkcie

Triedy Pythonu sú základným pojmom. Je základom štandardnej knižnice, práce najobľúbenejších programov a samotného jazyka. Ak sa chcete stať viac než len nováčikom, musíte pochopiť podstatu a princíp práce s triedami a predmetmi.

Aké sú triedy

Toto je základná programová zložka PLO. V Pythone sa triedy používajú na implementáciu nových typov objektov a sú vytvorené pomocou špeciálnej triedy inštrukcií. Z vonkajšieho hľadiska sa podobajú štandardným vloženým dátovým typom, ako sú čísla alebo sekvencie. Ale v objektoch triedy existuje významný rozdiel - zachovanie dedičstva.


Objektovo orientované programovanie na Pythone je založené výlučne na hierarchickom dedičstve tried. Ide o univerzálny spôsob prispôsobovania a opätovného použitia kódu. Ale objektovo orientovaný prístup nie je povinný. Python nemá problém, ktorý umožňuje iba procedurálne a funkčné programovanie. Hlavnou úlohou tried v Pythone je dátový paket a spustiteľný kód. Sú syntakticky podobné vyhláseniu def. Rovnako ako funkcie vytvárajú svoje menné priestory, ktoré je možné opakovane volat z akejkoľvek časti programu. Prečo ich potom potrebujú? Triedy sú silnejším a všestranným nástrojom. Väčšina ich potenciálu sa odhaľuje v čase vzniku nových objektov.

Význam tried a princíp dedičnosti

Každý objekt má svoj vlastný priestor názvov, ktorý možno naprogramovať, zadávať premenné avytvoriť akékoľvek funkcie. Existujú aj atribúty zdedené z triedy object.attribute. To je význam OOP.


Vďaka dedičnosti je vytvorený strom hierarchie. V praxi to je nasledovné. Keď sa interpret narazí výraz object.attribute, že začne hľadať prvý výskyt zadaného atribútu v triede. Nepriraďuje zistiť, Larry pokračuje hľadanie všetky súvisiace triedy, ktoré sú v strome vyššie, zľava doprava. Strom vyhľadávania zahŕňa:
  • superclasses, ktoré sú v hornej časti hierarchie a implementujú všeobecné správanie;
  • podtriedy - sú nižšie;
  • kópií - prvky programu s dedičným správaním.
  • Na obrázku je zobrazený strom triedy Python. Príklad ukazuje, že triedy 2 a 3 sú nadradené. V dolnej časti sú dve kópie inštancie 1 a 2 v strednej - trieda do triedy 1. Ak napíšete výraz Instance2.w, bude to robiť tlmočníka vzhľad .W hodnotu atribútu takto:
  • instance2;
  • Trieda 1;
  • trieda 2;
  • Trieda3.
  • Názov .w sa nájde v nadradenej triede. Na terminológii OOP to znamená, že inštancia 2 "zdedí" atribút .w triedy 3. Upozorňujeme, že kópia obrazu zdedí len štyri atribúty: .W, .x, .y .Z:
  • Za kópie Instance1.x a atribút Instance2.x nájdený .x Class 1, kde hľadanie sa zastaví do triedy 1 strom je nižšia ako triedy 2.
  • Instance1.y a atribút Instance2.y nájdený .y trieda 1, kde sa vyhľadávanie zastaví, pretože to je jediné miesto, kde sa objaví.
  • kopíruje Instance1.z a Instance2.z interpret nájde .Z triedy 2pretože je umiestnená vo stromu na ľavej strane než CLASS3.
  • Instance2.atrybut meno .name sa nachádza v instance2 bez hľadania stromu.
  • Predposledný odsek je najdôležitejšia. To ukazuje, ako triedy 1 prepíše atribút .x, .x nahradenie nadradenej verziu triedy 2.
    ,

    a metodika kópie

    OOP prevádzkuje dve hlavné koncepcie: Triedy a objekty. Triedy sú vytvára nové typy, triedy a objekty v Pythone majú svoje kópie. Napríklad všetky celočíselné premenné vzťahujúce sa k integrovanému dátový typ int. V OOP jazyka sú inštancie triedy int. Triedy sú stanovené hlavné smery, a objektov prostredníctvom výziev. Môžu ukladať dáta a mať svoje funkcie alebo triedne metódy. V Pythone terminológie je dôležitá. S pomocou nezávislých programátorov charakteristické rysy od tých, ktoré patria do tried. Premenné týkajúce sa predmetov nazývaných pole. Existujú dva typy polí v PLO. Prvý z nich - premenná patriaci do celej triedy, druhé - variabilné jednotlivé vzorky. Polí a metód s atribútmi triedy. V Pythone sú písané v bloku kóde po triede kľúčových slov.

    Spôsob a vlastný význam

    spôsob - názov funkcie s voliteľným seba. To je pripojené k hornej časti zoznamu parametrov. Ak je to žiaduce, premenná môže byť volaná iným menom, ale táto iniciatíva medzi programátormi nie je vítaný. Self - štandardné, ľahko rozpoznateľný názov v kóde. Špeciálne pre prácu s ním nejaký navrhnutý vývojové prostredie. Aby bolo možné lepšie pochopiť význam seba v PLO, predstavte si, že máme triedu pomenovanú Classa a spôsob Metoda:
  • trieda Classa;
  • def metódaA (self, argument1 argument2).
  • Objekt objectA je inštancia ClassA a volanie metódy vyzerá takto:
  • objectA.methodA (argument1 argument2).
  • Keď tlmočník vidí tento krok, automaticky prevádza takto: ClassA.methodA (objectA, argument1 argument2). To znamená, že inštancia triedy používa vlastnú premennú ako odkaz na seba.
    Ako vytvoriť premenné, metódy a inštancie tried
    Navrhujeme rozobrať praktický príklad z interaktívneho shellu Pythonu. Vytvorenie triedu "ЭksperymentPervыy" začína inštrukcie triedy komponentov:
  • trieda ЭksperymentPervыy
  • def setinfo (self, hodnota): # vytvoriť prvý metódu s argumentmi
  • self.data = hodnoty [41 ]
  • def zobrazenie (self): # druhá metóda
  • tlač (self.data) # tlač údajov kopírovania.
  • Po povinnom ustúpení existuje blok s priloženými pokynmi def, v ktorom objektom objektom sú priradené mená setinf a zobrazenie. S ich pomocou sa vytvoria atribúty ExperimentPrivy.setinf a ExperimentPrivy.display. V skutočnosti akýkoľvek názov, ktorý priradí hodnotu najvyššej úrovni vo vnorenom bloku, sa stáva atribútom. Ak chcete zistiť, ako metódy fungujú, musíte vytvoriť dve inštancie:
  • x = Experiment First () # Vytvoria sa dve kópie;
  • y = ExperimentPerfect () # Každý je samostatný menný priestor.
  • Na začiatku vzorky neukladajú žiadne informácie a sú úplne prázdne. Ale sú spojené s ich triedou:
  • x.setinf ("Teach Python") # Zavolajte metódu, v ktorej self-x.
  • y.setinf (314) # Ekvivalent: Experiment First .setinf (y, 314)
  • Ak používate názov inštanciex, y odkazujeme na atribút objektu .setinf triedy triedy Experiment, potom interpret vráti hodnotu atribútu triedy ako výsledok vyhľadávania stromu dedičstva.
  • y.display ()
  • 314.
  • x.display () # In x a y vaše hodnoty self.data)

    Preťaženie operátorov

    V Pythone môžu triedy preťažiť operátorov vyhlásení. Táto možnosť vytvára kópie podobné vstavaným dátovým typom. Spôsobom je zaviesť metódy so špeciálnymi názvami, ktoré začínajú a končia dvojitým podčiarknutím. Zvážte v akcii __init__ a __sub__. Prvá metóda sa nazýva konštruktor triedy. V nástroji Python __init__ vykoná operáciu vytvárania preťaženia. Druhá metóda __sub__ implementuje operáciu odčítania.
  • trieda zaťaženia: # vytvorí novú triedu
  • def __init __ (vlastné, štart):
  • A = preťaženie

    #__ init __ (A, 10)

  • B = preťaženie [
  • 8.
  • Viac o metóde __init__

    Metóda __init__
  • najčastejšie používané pri práci s triedami. Je to nevyhnutné pre inicializáciu rôznych objektov. __init__ volajte samostatne. Pri vytváraní novej inštancie metóda automaticky prijme argumenty uvedené v zátvorkách. Pomocou metód preťaženia môžete implementovať akékoľvek operácie s vloženými dátovými typmi. Väčšina z nich sa používa iba pri riešení špeciálnych úloh, pri ktorých je potrebné objektovaťsimulovali správanie štandardných objektov. Metódy sú zdedené z superclasses a nie sú povinné. V počiatočných fázach je ľahké to urobiť bez nich. Ale pre úplné ponorenie do programovania a podstaty PLO, potrebujete zručnosti práce s operátormi.

    __getitem__ method

    Metóda __getitem__ prekonáva prístup k položke indexu. Ak je zdedený alebo je prítomný v definícii triedy, potom pre každú operáciu indexer bude automaticky nazývať. Napríklad, keď sa objaví kópia F v extrakčnej prvku expresie s indexom, ako je f [i], Python interpret je __getitem__ metóda, objekt F míňa prvý argument index uvedený v zátvorkách v druhom. Ďalšie trieda "PrymerYndeksatsyy" vráti štvorec indexu:
  • , trieda PrymerYndeksatsyy
  • def __getitem __ (self, index):
  • vratnej index ** 2
  • F = PrymerYndeksatsyy ()
  • f
  • # expresie f [i] je f .__ GetItem __ (i)
  • 4
  • , pre i v rozsahu
  • print (F [i] end = «») # je __getitem __ (F, i) v každej iterácii
  • 014 916
  • Pri použití tejto metódy, môžete vykonať operáciu extrakciu strih, ktorý je často používaný pri práci so sekvenciami. Pri spracovaní zoznamu štandardných transakcií syntax je nasledujúca:
  • Register = [13, 6, "a", "c", 74,9]
  • Zoznam [2: 4]
  • [6, "a", "c", 74.9]
  • Zoznam [: -1]
  • [13, 6, "a", "c"]
  • Zoznam [:: 2]
  • [13 "a" 74,9 ]
  • trieda, ktorá implementuje metódu __getitem__:
  • Indexer trieda
  • moy_spysok = [13, 6, "a", "c", 74,9]
  • def __getitem__ (vlastné, indexové): # Volané kedyindexovanie alebo výpis plátok
  • print («GetItem:», index)
  • return self.moy_spysok [index] # Vykoná výťažky indexovanie alebo znížiť
  • X = Indexer ()
  • X# Pri indexovanie __getitem__ prijíma celé číslo
  • GetItem: 0
  • , 13
  • X [2: 4] # Pri ťažbe rez __getitem__ dostane rez objekt
  • GetItem: plátok (apríl 2 Žiadny)
  • ["a", "c"]
  • Adresa prisudzovať

    Pre odkaz na zvláštne atribút metóda sa používa __getattr__. On použil názov atribútu ako reťazec v prípade pokusov, ako sa dostať odkaz na neexistujúce alebo vágne atribútu. Keď tlmočník môže nájsť požadovaný objekt v stromovom dedičstve, __getattr __. Nie je volaný. Metóda je vhodná pre všeobecný spracovanie požiadaviek na atribúty:
  • , trieda Gone:
  • def __getattr __ (self, atname):
  • , ak atname == «veku»:
  • návrat 20
  • ďalej:
  • zvyšuje, AttributeError atname
  • , D = uplynulý ()
  • D. vek
  • 20
  • D. meno
  • AttributeError: name
  • Trieda preč a jej kópia D nemajú žiadne atribúty. Preto, keď sa odkazuje na D. veku automaticky vyvolaná metóda __getattr__. Samotná kópia sa prenáša ako ja a názov neurčitého "veku" v riadku atname. Trieda vráti výsledok odvolania na meno D. veku, a to napriek skutočnosti, že tento atribút nie je. Ak sa neočakáva, že atribút class spôsob spracovania __getattr__ je zapustený výnimku, a tým aj interpret odovzdáva informácie, že názov v skutočnosti je neistá. V tomto prípade pokus o odkaz na meno D. vedie k chybe. Metóda funguje podobným spôsobomPreťaženie operátorov __setattr__, zachytenie každého pokusu o priradenie hodnôt atribútov. Ak je táto metóda zapísaná v telo triedy, výraz "self.attitude = hodnota" sa prevedie na výzvu metódy self .__ setattr _ ("atribút", hodnota). Opísali sme len niekoľko existujúcich metód preťaženia. Celý zoznam je v štandardnom jazykovom sprievodcovi a obsahuje oveľa viac mien.

    Ďalšie funkcie

    OOP sa niekedy používajú na komplexné a neštandardné úlohy. Vďaka dedičnosti tried v jazyku Python sa rozširuje a prispôsobuje správanie vstavaných dátových typov a ich schopnosti. Ak nie ste spokojný so skutočnosťou, že indexovanie v sekvenciách začína od začiatku, môžete ho opraviť pomocou inštrukcie pre triedu. Ak to chcete urobiť, musíte vytvoriť podtriedu zoznamu typov s novými názvami všetkých typov a vykonať potrebné zmeny. Tiež v PLO v jazyku Python sú dekoratéry funkcií, statické metódy a mnoho ďalších komplexných a špeciálnych techník.

    Súvisiace publikácie