Python osztályok és objektumok - objektumorientált programozás

Ez a 'Python osztály' blog az osztály, az attribútum és a különféle OOPS-fogalmak alapjaival foglalkozik, mint például az öröklés, a polimorfizmus és a kapszulázás.

Miután a Stack Overflow azt jósolta, hogy 2019-re a Python az aktív fejlesztők szempontjából meghaladja a többi nyelvet, a kereslet csak növekszik.A Python objektum-orientált programozási paradigmát követ. Foglalkozik a python osztályok deklarálásával, objektumok létrehozásával belőlük és a felhasználókkal való interakcióval. Objektum-orientált nyelven a program önálló objektumokra van osztva, vagy mondhatni több mini-programra is. Minden objektum az alkalmazás egy másik részét képviseli, amely képes egymással kommunikálni.
Ebben a python osztályblogban az osztályok és objektumok minden aspektusát a következő sorrendben fogod megérteni:



Lássunk neki.:-)



Mi az a Python osztály?

A python osztálya az a terv, amelyből konkrét objektumok jönnek létre. Ez lehetővé teszi, hogy sajátos módon strukturálja a szoftvert. Itt jön egy kérdés, hogyan? Az osztályok lehetővé teszik számunkra, hogy logikusan csoportosítsuk adatainkat és funkcionáljunk oly módon, hogy könnyen újrafelhasználhatók legyenek, és ha szükséges, tovább építsünk. Tekintsük az alábbi képet.

ClassesAndObjects - Python osztály - EdurekaAz első képen (A) egy ház tervrajzát ábrázolja, amely annak tekinthető Osztály . Ugyanazzal a tervrajzzal több házat is létrehozhatunk, és ezeknek tekinthetők Tárgyak . Egy osztály használatával konzisztenciát adhat a programjainak, hogy azok tisztább és hatékonyabb módon használhatók legyenek. Az attribútumok adattagok (osztályváltozók és példányváltozók) és módszerek, amelyekhez pontszerű jelöléssel jutunk hozzá.



  • Osztály változó olyan változó, amelyet az osztály összes különböző objektuma / példánya megoszt.
  • Példányváltozók olyan változók, amelyek minden példányra egyediek. A metódus belsejében van megadva, és csak egy osztály aktuális példányához tartozik.
  • Mód függvényeknek is nevezik, amelyek egy osztályban vannak meghatározva, és leírják az objektum viselkedését.

Most lépjünk előre, és nézzük meg, hogyan működik a PyCharm-ban. A kezdéshez először nézze meg a python osztály szintaxisát.

Szintaxis :

osztály Osztálynév: utasítás-1. . nyilatkozat-N

Itt a „ osztály' utasítás új osztálydefiníciót hoz létre. Az osztály neve azonnal a „ osztály' pythonban, amelyet kettőspont követ. Osztály létrehozásához a pythonban vegye figyelembe az alábbi példát:



osztály alkalmazottja: pass #no attribútumok és módszerek átadása emp_1 = worker () emp_2 = worker () #instance változó manuálisan létrehozható 'emp_1.pay = 10000 emp_2.first =' teszt 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Kimenet -

aayushi@edureka.co test@company.com

És mi van, ha nem akarjuk manuálisan beállítani ezeket a változókat. Sok kódot fog látni, és hajlamos a hibára is. Tehát az automatizálás érdekében használhatjuk az „init” módszert. Ehhez értsük meg, hogy pontosan mi a metódus és attribútum egy python osztályban.

Módszerek és attribútumok egy Python osztályban

Most egy osztály létrehozása hiányos valamilyen funkció nélkül. Tehát a funkcionalitás meghatározható különféle attribútumok beállításával, amelyek tárolóként szolgálnak az attribútumokkal kapcsolatos adatokhoz és funkciókhoz. A python függvényeit más néven is hívják Mód . Beszélek a benne módszer , ez egy speciális funkció, amelyet akkor hívnak meg, amikor az adott osztály új objektuma megjelenik. Lehet úgy gondolni, mint egy inicializálási módszer, vagy konstruktornak tekintheti, ha bármilyen más objektum-orientált programozási háttérből származik, például C ++, Java stb. Folytassuk a python osztályt, és ezzel a módszerrel fogadjuk el a keresztnevet, a vezetéknevet és a fizetést.

osztály alkalmazottja: def __init __ (én, első, utolsó, sal): önnév = első önnév.név = utolsó én.szal = sal ön. email = első + '.' + utolsó + '@ company.com' emp_1 = alkalmazott ('aayushi', 'johari', 350000) emp_2 = alkalmazott ('teszt', 'teszt', 100000) nyomtatás (emp_1.email) nyomtatás (emp_2.email)

Most az „init” módszerünkön belül beállítottuk ezeket a példányváltozókat (self, first, last, sal). A Self az a példa, amely azt jelenti, hogy amikor mindig az self.fname = first-t írjuk, az megegyezik az emp_1.first = ’aayushi’ kifejezéssel. Ezután létrehoztunk egy alkalmazott osztály példányt, ahol átadhatjuk az init metódusban megadott értékeket. Ez a módszer a példányokat érvként veszi fel. Ahelyett, hogy manuálisan csinálná, meg fog történni automatikusan Most.

mi a bab a java-ban

Ezután azt akarjuk, hogy valamilyen műveletet hajtsunk végre. Ehhez hozzáadunk a módszer ennek az osztálynak. Tegyük fel, hogy azt akarom, hogy a funkció megjelenítse az alkalmazott teljes nevét. Tehát valósítsuk meg ezt gyakorlatilag.

osztály alkalmazottja: def __init __ (én, első, utolsó, sal): önnév = első önnév.név = utolsó én.szal = sal ön. email = első + '.' + last + '@ company.com' def teljes név (self): return '{} {}'. format (self.fname, self.lname) emp_1 = alkalmazott ('aayushi', 'johari', 350000) emp_2 = alkalmazott ('teszt', 'teszt', 100000) nyomtatás (emp_1.email) nyomtatás (emp_2.email) nyomtatás (emp_1.fullname ()) print (emp_2.fullname ())

Kimenet-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Mint fent láthatod, létrehoztam egy „teljes név” nevű módszert egy osztályon belül. Tehát a python osztályon belül minden módszer automatikusan a példányt veszi első argumentumnak. Most ezen a módszeren belül megírtam a logikát a teljes név kinyomtatására, és ezt adtam vissza az emp_1 keresztnév és vezetéknév helyett. Ezután az „én” -t használtam, hogy az az összes példánnyal működjön. Ezért ennek minden egyes nyomtatásához használjuk a módszer .

A Python osztályokkal előre haladva vannak olyan változók, amelyek meg vannak osztva az osztály összes példánya között. Ezeket nevezzük osztályváltozók . A példányváltozók egyediek lehetnek minden példányhoz, például nevek, e-mail, szal stb. Bonyolult? Értsük meg ezt egy példával. A fizetés éves növekedésének megismeréséhez olvassa el az alábbi kódot.

osztály alkalmazottja: perc_raise = 1.05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def teljes név (self): return '{} {}'. format (self.fname, self.lname) def Apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = alkalmazott ('aayushi', 'johari', 350000) emp_2 = alkalmazott ('teszt', 'teszt', 100000) nyomtatás (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Kimenet-

350000 367500

Mint fent láthatja, először kinyomtattam a fizetést, majd alkalmaztam az 1,5% -os emelést. Ezen osztályváltozókhoz való hozzáféréshez vagy az osztályon, vagy az osztály egy példányán keresztül kell hozzáférnünk hozzájuk. Most értsük meg a python osztály különféle attribútumait.

Attribútumok egy Python osztályban

A Python attribútumai egy objektum, elem vagy fájl tulajdonságát definiálják. Kétféle attribútum létezik:

  • Beépített osztályattribútumok: Különféle beépített attribútumok vannak jelen a Python osztályokban. Például _dict_, _doc_, _name _ stb. Hadd vegyem ugyanazt a példát, ahol meg szeretném tekinteni az alkalmazott1 összes kulcsérték-párját. Ehhez egyszerűen megírhatja az alábbi állítást, amely az osztály névterét tartalmazza:

    nyomtatás (emp_1 .__ dict__)

    A végrehajtás után kimenetet kap, például: {’fname’: ’aayushi’, ’lname’: ’johari’, ‘sal’: 350000, ’email’: ’aayushi.johari@company.com’}

  • A felhasználók által meghatározott attribútumok : Az attribútumok az osztálydefiníción belül jönnek létre. Dinamikusan létrehozhatunk új attribútumokat egy osztály meglévő példányaihoz. Az attribútumok az osztályok nevéhez is köthetők.

Ezután megvan nyilvános, védett és magán attribútumok. Értsük meg őket részletesen:

Elnevezés típus Jelentése
NévNyilvánosEzek az attribútumok szabadon használhatók egy osztálydefiníción belül vagy kívül
_névVédettA védett attribútumokat nem szabad az osztálydefiníción kívül használni, hacsak nem egy alosztály definíción belül
__névMagánEz a fajta tulajdonság elérhetetlen és láthatatlan. Sem ezeket az attribútumokat nem lehet elolvasni és írni, kivéve magát az osztálydefiníciót


Ezután ismerjük meg a python osztály legfontosabb összetevőjét, vagyis az Objektumokat.

Mik az objektumok egy Python osztályban?

Amint fentebb tárgyaltuk, egy objektum különböző attribútumok elérésére használható. Az osztály egy példányának létrehozására szolgál. A példány egy osztály futás közben létrehozott objektuma.

To gyors áttekintést ad, az objektum alapvetően minden, amit körülnéz. Például: A kutya az állatosztály tárgya, én az emberi osztály tárgya vagyok. Hasonlóképpen különböző objektumok is lehetnek ugyanannak a telefonosztálynak.Ez nagyon hasonlít egy függvényhíváshoz, amelyet már megvitattunk. Értsük meg ezt egy példával:

class MyClass: def func (self): print ('Hello') # új MyClass létrehozása ob = MyClass () ob.func ()

Haladva a python osztállyal, értsük meg a különféle OOP fogalmakat.

OOP-k fogalmai

Az OOPs a Python objektum-orientált programozására utal. Nos, a Python nem teljesen objektumorientált, mivel tartalmaz néhány eljárási funkciót. Most biztosan kíváncsi arra, hogy mi a különbség az eljárási és az objektum-orientált programozás között. Kétséged eloszlatása érdekében egy eljárási programozás során a teljes kódot egy hosszú eljárásba írják, annak ellenére, hogy tartalmazhat függvényeket és alprogramokat. Nem kezelhető, mivel mind az adatok, mind a logika összekeveredik. De amikor objektum-orientált programozásról beszélünk, a program önálló objektumokra vagy több mini-programra oszlik. Minden objektum az alkalmazás egy másik részét képviseli, amelynek saját adatai és logikája van egymással való kommunikációhoz. Például egy webhelynek különböző tárgyai vannak, például képek, videók stb.
Az objektum-orientált programozás magában foglalja a Python osztály, az objektum, az öröklődés, a polimorfizmus, az absztrakció stb. Fogalmát. Értsük meg részletesen ezeket a témákat.

Python osztály: Öröklés

Az öröklés lehetővé teszi számunkra az attribútumok és módszerek öröklését az alap / szülő osztályból. Ez hasznos, mivel alkategóriákat hozhatunk létre, és az összes funkciót megszerezhetjük a szülő osztályunktól. Ezután felülírhatjuk és új funkciókat adhatunk hozzá anélkül, hogy befolyásolnánk a szülőosztályt. Értsük meg példával a szülő osztály és a gyermek osztály fogalmát.

Amint a képen láthatjuk, a gyermek az apjától örökölte a tulajdonságokat. Hasonlóképpen, a pythonban két osztály van:

1. Szülő osztály (Super vagy Base osztály)

2. Gyermekosztály (alosztály vagy származtatott osztály)

konvertálni kettősről int-re

A tulajdonságokat öröklő osztály néven ismert Gyermek Osztály, míg egy osztály, amelynek tulajdonságai öröklődnek, néven ismert Szülő osztály.

Az öröklés az alkotás képességére utal Alosztályok amelyek szüleik specializációit tartalmazzák. Ez további négy típusra oszlik, nevezetesen egy-, többszintű, hierarchikus és többszörös örökségekre. A jobb megértés érdekében olvassa el az alábbi képet.

Menjünk tovább a python osztályba, és értsük meg, hogy az öröklés hasznos.

Mondjuk, szeretnék osztályokat létrehozni az alkalmazottak típusaihoz. Alosztályként létrehozom a „fejlesztőket” és a „menedzsereket”, mivel a fejlesztőknek és a vezetőknek is lesz neve, e-mail címe és fizetése, és mindezek a funkciók ott lesznek az alkalmazottak osztályában. Tehát ahelyett, hogy másolnánk az alosztályok kódját, egyszerűen újra felhasználhatjuk a kódot, örökölve a munkavállalótól.

osztály alkalmazottja: szam_employee = 0 emelés_összeg = 1.04 def __init __ (én, első, utolsó, sal): ön.első = első én.utolsó = utolsó én.szal = sal ön. email = első + '.' + utolsó + '@ cég.com' alkalmazott.num_employee + = 1 def teljes név (self): return '{} {}'. format (self.first, self.last) def Apply_raise (self): self.sal = int ( self.sal * emelés_összeg) osztály fejlesztő (alkalmazott): pass emp_1 = fejlesztő ('aayushi', 'johari', 1000000) print (emp_1.email)
 Kimenet - aayushi.johari@company.com

Amint a fenti kimenetből látható, a munkavállalói osztály minden részlete elérhető a fejlesztői osztályban.És mi van akkor, ha 10% -ra akarom változtatni egy fejlesztő emelésének összegét? nézzük meg, hogyan lehet gyakorlatilag megtenni.

osztály alkalmazottja: szam_employee = 0 emelés_összeg = 1.04 def __init __ (én, első, utolsó, sal): ön.első = első én.utolsó = utolsó én.szal = sal ön. email = első + '.' + utolsó + '@ cég.com' alkalmazott.num_employee + = 1 def teljes név (self): return '{} {}'. format (self.first, self.last) def Apply_raise (self): self.sal = int ( self.sal * emelés_összeg) osztály fejlesztő (alkalmazott): emelés_összeg = 1,10 emp_1 = fejlesztő ('aayushi', 'johari', 1000000) nyomtatás (emp_1.emelkedés_összeg)
 Kimenet - 1.1

Amint láthatja, hogy a fizetések százalékos növekedését 4% -ról 10% -ra frissítette.Most, ha még egy attribútumot szeretnék hozzáadni, mondjon egy programozási nyelvet az init módszerünkben, de a szülő osztályunkban nem létezik. Van erre megoldás? Igen! átmásolhatjuk a teljes alkalmazott logikát, és ezt megtehetjük, de ez ismét növeli a kód méretét. Tehát ennek elkerülése érdekében vegyük figyelembe az alábbi kódot:

osztály alkalmazottja: szam_employee = 0 emelés_összeg = 1.04 def __init __ (én, első, utolsó, sal): ön.első = első én.utolsó = utolsó én.szal = sal ön. email = első + '.' + utolsó + '@ cég.com' alkalmazott.num_employee + = 1 def teljes név (self): return '{} {}'. format (self.first, self.last) def Apply_raise (self): self.sal = int ( self.sal * emelés_összeg) osztály fejlesztő (alkalmazott): emelés_összeg = 1,10 def __init __ (saját, első, utolsó, sal, prog_lang): szuper () .__ init __ (első, utolsó, sal) ön.prog_lang = prog_lang emp_1 = fejlesztő ( 'aayushi', 'johari', 1000000, 'python') print (emp_1.prog_lang)

Ezért csak egy kis kóddal változtattam. Használtam a super .__ init __ (first, last, pay) elemet, amely az alaposztálytól örökölte a tulajdonságokat.Összefoglalva: az öröklődést a kód újrafelhasználására és a program komplexitásának csökkentésére használják.

Python osztály: polimorfizmus

A polimorfizmus a számítástechnikában az a képesség, hogy ugyanazt az interfészt jelenítse meg a különböző mögöttes formák számára. Gyakorlatilag a polimorfizmus azt jelenti, hogy ha a B osztály örökli az A osztályt, akkor nem kell mindent örökölnie az A osztályról, megtehet néhány dolgot, amelyet az A osztály másképp csinál. Leggyakrabban örökléssel foglalkoznak. A Python implicit módon polimorf, képes túlterhelni a szabványos operátorokat, hogy megfelelő viselkedésűek legyenek a kontextusuk alapján.

Értsünk meg egy példával:

osztály Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( self): nyomtatás ('MOW!') c = Macska ('cica') c.talk () d = Kutya (Animal) d.talk ()

Kimenet -

Miaú! Szövet

mi a különbség az absztrakt osztály és az interfész között?

Ezután térjünk át egy másik objektumorientált programozási koncepcióra, azaz absztrakcióra.

Python osztály: Absztrakció

Az absztrakciót a komplex valóság egyszerűsítésére használják, a problémának megfelelő osztályok modellezésével. Itt van egy elvont osztályunk, amely nem példányosítható. Ez azt jelenti, hogy nem hozhat létre objektumokat vagy példányokat ezekhez az osztályokhoz. Csak bizonyos funkciók örökléséhez használható, amelyeket alaposztályként hív. Tehát örökölheti a funkciókat, ugyanakkor nem hozhat létre példányt az adott osztályból. Értsük meg az absztrakt osztály fogalmát az alábbi példával:

abc importból ABC, abstractmethod class Alkalmazott (ABC): @abstractmethod def calc_salary (self, sal): pass class Developer (Employee): def calc_alary (self, sal): finalsalary = sal * 1.10 return finalalsalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Kimenet-

11000.0

Amint a fenti kimeneten látható, az alapfizetést 10% -ra emeltük, vagyis a fizetés most 11000. Most ha valóban továbbmegy és az „Employee” osztályba tartozó tárgyat készít, akkor hibát dob, mivel a python nem Nem engedi, hogy absztrakt osztályú objektumot hozz létre. Az öröklés használatával azonban tulajdonképpen örökölheti a tulajdonságokat és elvégezheti a megfelelő feladatokat.

Szóval srácok, mindez python osztályokról és tárgyakról szólt dióhéjban. Áttekintettük a Python osztály összes alapját, az objektumokat és a különböző objektum-orientált fogalmakat a pythonban, így most elkezdheti a gyakorlást. Remélem, hogy önök szívesen olvasták ezt a blogot a „Python osztályon”, és tisztában vannak minden egyes szempontommal, amelyet fentebb tárgyaltam. A python osztály után újabb blogokkal fogok előállni a Pythonon, hogy a scikit tanuljon könyvtárat és tömböt. Maradjon velünk!

Van egy kérdésünk? Kérjük, említse meg ennek a „Python osztály” blognak a megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.

Ha részletes ismereteket szeretne szerezni a Pythonról és annak különböző alkalmazásokról, megteheti élő online képzésünkkel, 24/7 támogatással és életre szóló hozzáféréssel.