Python OOP
Python OOP
Ca ș i celelalte limbaje de programare de uz general, Python este de asemenea un limbaj orientat pe obiect încă de la începuturile sale.
Ne permite să dezvoltăm aplicaț ii folosind o abordare orientată pe [Link], putem crea ș i utiliza cu uș urinț ă
clase ș i obiecte.
Un paradigme orientate pe obiect este de a proiecta programul folosind clase ș i obiecte. Obiectul este legat de lumea reală.
entităț i precum carte, casă, stilou, etc. Conceptul OOP se concentrează pe scrierea codului reutilizabil. Este un concept răspândit
tehnică de a rezolva problema prin crearea de obiecte.
Principiile majore ale sistemului de programare orientată pe obiect sunt prezentate mai jos.
o Clasă
o Obiect
o Metodă
o Moș tenire
o Polimorfism
o Abstracț ia datelor
o Încapsulare
Clasă
Clasa poate fi definită ca o colecț ie de obiecte. Este o entitate logică care are anumite atribute ș i metode specifice.
De exemplu: dacă ai o clasă de angajat, atunci ar trebui să conț ină o atribut ș i o metodă, adică un e-mail, nume,
vârstă
Sintaxă
classClassName
statement-1
.
.
<declaraț ie-N
Obiect
Obiectul este o entitate care are stare ș i comportament. Poate fi orice obiect din lumea reală, cum ar fi mouse-ul, tastatura, scaunul,
masă, stilou, etc.
Totul în Python este un obiect, iar aproape totul are atribute ș i metode. Toate funcț iile au o funcț ie încorporată
atributul __doc__, care returnează docstring-ul definit în codul sursă al funcț iei.
Când definim o clasă, aceasta trebuie să creeze un obiect pentru a aloca memoria. Ia în considerare următorul exemplu.
Exemplu:
clasă auto
def __init__(self, modelname, year):
[Link] = modelname
[Link] = anul
defdisplay(self):
print([Link],[Link])
În exemplul de mai sus, am creat clasa numită maș ină, care are două atribute: numele modelului ș i anul.
a creat un obiect c1 pentru a accesa atributul clasei. Obiectul c1 va aloca memorie pentru aceste valori. Vom învăț a
mai multe despre clasă ș i obiect în următorul tutorial.
Metodă
Metoda este o funcț ie care este asociată cu un obiect. În Python, o metodă nu este unică pentru instanț ele de clasă. Orice
Tipul de obiect poate avea metode.
Moștenire
Moș tenirea este cel mai important aspect al programării orientate pe obiect, care simulează conceptul din lumea reală de
moș tenire. Aceasta specifică faptul că obiectul copil dobândeș te toate proprietăț ile ș i comportamentele obiectului părinte.
Prin utilizarea moș tenirii, putem crea o clasă care foloseș te toate proprietăț ile ș i comportamentul unei alte clase. Noua clasă
este cunoscut ca o clasă derivată sau clasă copil, iar cea ale cărei proprietăț i sunt dobândite este cunoscută ca o clasă de bază sau
clasa părinte.
Polimorfism
Polimorfismul con ț ine două cuvinte "poly" ș i "morphs". Poly înseamnă multe, iar morph înseamnă formă. Prin
prin polimorfism, înț elegem că o sarcină poate fi efectuată în moduri diferite. De exemplu - ai o clasă
animal, iar toate animalele vorbesc. Dar ele vorbesc diferit. Aici, comportamentul de 'a vorbi' este polymorfic într-un sens ș i
depinde de animal. Aș adar, conceptul abstract de "animal" nu "vorbeș te" de fapt, dar animalele specifice (cum ar fi câinii
ș i pisicile) au o implementare concretă a acț iunii "vorbeș te".
Încapsulare
Încapsularea este de asemenea un aspect esenț ial al programării orientate pe obiecte. Este folosită pentru a restricț iona accesul la metode ș i
variabile. În încapsulare, codul ș i datele sunt împachetate împreună într-o unitate unică pentru a fi protejate de modificări accidentale.
Abstracția datelor
Abstrac ț ia datelor ș i încapsularea sunt adesea folosite ca sinonime. Ambele sunt aproape sinonime deoarece datele
abstracț ia este realizată prin încapsulare.
Abstracț ia este folosită pentru a ascunde detaliile interne ș i a arăta doar funcț ionalităț ile. A abstraha ceva înseamnă a da nume.
pentru lucruri astfel încât numele să surprindă esenț a a ceea ce face o funcț ie sau un întreg program.
Diferenț a dintre programarea orientată pe obiecte ș i programarea orientată pe proceduri este dată mai jos:
3. Simulează entitatea din lumea reală. Aș a că lumea reală nu simulează lumea reală. Funcț ionează pe
problems can be easily solved through oops. instrucț iuni pas cu pas împărț ite în mici
părț i numite funcț ii.
4. Oferă ascunderea datelor. Deci, este mai sigur. Limbajul procedural nu oferă asta.
decât limbajele procedurale. Nu poț i accesa o modalitate corespunzătoare pentru legarea datelor, aș a că este mai puț in
Presupune ț i că o clasă este un prototip al unei clădiri. O clădire con ț ine toate detaliile despre etaj, camere, u ș i,
feronier, etc. putem construi câte clădiri dorim, bazându-ne pe aceste detalii. Prin urmare, clădirea poate fi văzută ca
o clasă, ș i putem crea atâtea obiecte ale acestei clase.
Pe de altă parte, obiectul este instanț a unei clase. Procesul de creare a unui obiect poate fi numit instanț iere.
În această secț iune a tutorialului, vom discuta despre crearea de clase ș i obiecte în Python. De asemenea, vom discuta despre modul în care o clasă
atributul este accesat prin utilizarea obiectului.
Crearea claselor în Python
În Python, o clasă poate fi creată folosind cuvântul cheie class, urmat de numele clasei. Sintaxa pentru a crea o clasă
este dat mai jos.
Sintaxă
1. classClassName
2. #declaraț ie_suită
În Python, trebuie să observăm că fiecare clasă este asociată cu un ș ir de documentaț ie care poate fi accesat prin
utilizând <numele-clasei>.__doc__.O clasă conț ine un set de declaraț ii care include câmpuri, constructor, funcț ie, etc. definiț ie.
Consideraț i următorul exemplu pentru a crea o clasă Angajat care conț ine două câmpuri: ID-ul angajatului ș i numele.
Clasa conț ine de asemenea o funcț ie display(), care este utilizată pentru a afisa informaț iile angajatului.
1. clasăAngajat
2. id = 10
3. Devansh
4. def afisare (self):
5. print([Link],[Link])
Aici, self este folosit ca o variabilă de referinț ă, care se referă la obiectul actual al clasei. Este întotdeauna primul argument în
definirea funcț iei. Cu toate acestea, utilizarea self este opț ională în apelul funcț iei.
Autoparametrul
Auto-parametrul se referă la instanț a curentă a clasei ș i accesează variabilele clasei. Putem folosi orice.
în loc de self, dar trebuie să fie primul parametru al oricărei funcț ii care aparț ine clasei.
1. <nume-obiect> = <nume-clasă>(<argumente>)
Următorul exemplu creează o instanț ă a clasei Employee definită în exemplul de mai sus.
Exemplu
clasăAngajat
id = 10
John
defdisplay (self):
print("ID: %d \nNume: %s"%([Link],[Link]))
# Crearea unei instanț e emp a clasei Employee
emp = Angajat()
[Link]()
În codul de mai sus, am creat clasa Employee care are două atribute numite id ș i name ș i le-am atribuit
valoare pentru ei. Putem observa că am trecut self ca parametru în funcț ia de afiș are. Este folosit pentru a se referi la
atribut de clasă similar.
Am creat un nou obiect de instanț ă numit emp. Folosindu-l, putem accesa atributele clasei.
Șterge obiectul
Putem ș terge proprietăț ile obiectului sau obiectul în sine folosind cuvântul cheie del. Luaț i în considerare următorul exemplu.
clasaAngajat
id = 10
John
defdisplay(self):
ID: %d Nume: %s
# Crearea unei instanț e emp a clasei Employee
emp = Angajat()
Constructor Python
Un constructor este un tip special de metodă (funcț ie) care este folosit pentru a iniț ializa membrii de instanț ă ai clasei.
În C++ sau Java, constructorul are acelaș i nume ca ș i clasa sa, dar tratează constructorul diferit în Python. Este folosit
pentru a crea un obiect.
Constructorii pot fi de două tipuri.
Constructor parametrizat
2. Constructor non-parameterizat
Definiț ia constructorului este executată atunci când creăm obiectul acestei clase. Constructorii verifică de asemenea că există
suficiente resurse pentru ca obiectul să îndeplinească orice sarcină de start-up.
Putem pasa orice număr de argumente în momentul creării obiectului clasei, în func ț ie de
definiț ia __init__(). Este folosită în principal pentru a iniț ializa atributele clasei. Fiecare clasă trebuie să aibă un constructor, chiar dacă
se bazează pur ș i simplu pe constructorul implicit.
Luaț i în considerare următorul exemplu pentru a iniț ializa atributele clasei Employee.
Exemplu
clasaAngajat
def__init__(self, name, id):
[Link] = id
[Link] = nume
defdisplay(self):
print("ID: %d Nume: %s" % ([Link], [Link]))
Angajat("John", 101)
Angajat("David", 102)
[Link]()
Exemplu
elevDeClasă
Constructor - non parametrizat
def__init__(self):
Acesta este un constructor non-parametrizat
defshow(self,nume):
print("Bună", nume)
student = Student()
[Link]ăta("John")
Constructorul parametrizat are mai mulț i parametri împreună cu self. Consideraț i următorul exemplu.
Exemplu
clasaStudent
Constructor - parametrizat
def__init__(self, nume):
print("Acesta este un constructor parametrizat")
[Link]
defshow(self):
print("Bună", [Link])
Studentul("John")
[Link]ă()
Exemplu
elevDeClasă
roll_num = 101
Iosif
defdisplay(self):
print(self.roll_num,[Link])
st = Student()
[Link]()
Exemplu
clasăStudenț i
def__init__(self):
Primul Constructor
def__init__(self):
print("Al doilea constructor")
st = Student()
În codul de mai sus, obiectele au apelat al doilea constructor, în timp ce ambele au aceeaș i configuraț ie. Primul
metoda nu este accesibilă de către obiectul thest. Intern, obiectul clasei va apela întotdeauna ultimul constructor dacă
clasa are mai mulț i constructori.
SN Functon Descriere
2 setattr(obj, nume, valoare) Este folosit pentru a seta o valoare particulară unui atribut specific al unui obiect.
4 areattr(obj, nume) Returnează adevărat dacă obiectul conț ine o anumită caracteristică.
clasaStudent
def__init__(self, nume, id, varsta):
[Link]
[Link] = id
[Link]
print(hasattr(s,'id'))
# deletes the attribute age
delattr(s,'age')
Împreună cu celelalte atribute, o clasă Python conț ine, de asemenea, unele atribute de clasă încorporate care oferă informaț ii
despre clasă.
SN Atribute Descriere
1 __dict__ Oferă dicț ionarul care conț ine informaț ii despre spaț iul de nume al clasei.
4 Este folosit pentru a accesa modulul în care este definită această clasă.
student de clasă
def__init__(self,nume,id,varsta):
[Link] = nume;
[Link] = id;
[Link]
defafisare_detalii(self):
print("Nume:%s, ID:%d, vârstă:%d"%([Link],[Link]))
Student("John", 101, 22)
print(s.__doc__)
print(s.__dict__)
print(s.__module__)
Moștenirea în Python
Mo ș tenirea este un aspect important al paradigmei orientate pe obiect. Mo ș tenirea oferă reutilizarea codului pentru
program deoarece putem folosi o clasă existentă pentru a crea o clasă nouă în loc să o creăm de la zero.
În moș tenire, clasa copilă dobândeș te proprietăț ile ș i poate accesa toț i membrii de date ș i funcț iile definite în
clasa părinte. O clasă copil poate, de asemenea, să ofere propria sa implementare specifică funcț iilor clasei părinte. În acest
în această secț iune a tutorialului, vom discuta despre moș tenire în detaliu.
În python, o clasă derivată poate moș teni o clasă de bază doar menț ionând baza în paranteză după clasa derivată
nume. Consideraț i următoarea sintaxă pentru a moș teni o clasă de bază în clasa derivată.
Sintaxă
clasa derivată-clasă(baza)
1. <clasă-suită>
O clasă poate moș teni mai multe clase menț ionându-le pe toate în interiorul parantezelor. Consideraț i următoarea sintaxă.
Sintaxă
Exemplul 1
clasaAnimal
defvorbi(self):
tipăreș te("Animal Vorbitor")
#clasa copil Câine moș teneș te clasa de bază Animal
clasaCâine(Animal):
defbark(self):
câinele latră
d = Câine()
[Link]()
[Link]()
Moș tenirea pe mai multe niveluri este posibilă în Python, la fel ca în alte limbaje de programare orientate pe obiect. Moș tenirea pe mai multe niveluri este realizată
când o clasă derivată moș teneș te o altă clasă derivată. Nu există nicio limită asupra numărului de niveluri până la care, multi-
moș tenirea de nivel este arhivată în python.
Sintaxă
clasăclasa1:
<clasă-suită>
clasa clasa2 (clasa1):
<clasăSuită>
classclass3(class2):
<clasaSuită>
.
Exemplu
clasaAnimal
defvorbire(self):
print("Animal Vorbind")
Clasa copil Dog moș teneș te clasa de bază Animal
clasaCâine(Animal):
defbark(self):
câinele latră
Clasa copil Dogchild moș teneș te o altă clasă copil Dog
clasa CâineCopil(Câine):
înfrângere(self):
Mâncând pâine...
d = CâineCopil()
[Link]()
[Link]()
[Link]()
Sintaxă
classBase1
<clasa-suită>
clasaBaza2:
<clasă-suită>
.
.
.
classBaseN
<clasa-suită>
Exemplu
classCalculation1
defSuma(self,a,b):
returna+b;
clasăCalculare2:
defÎnmulț ire(self,a,b):
returna*b;
clasaDerivata(Calcul1, Calcul2):
def Împarte(self, a, b):
returna/b;
d = Derivat()
print([Link](10,20))
print([Link](10,20))
print([Link](10,20))
Metoda issubclass(sub,sup)
Metoda issubclass(sub, sup) este folosită pentru a verifica relaț iile dintre clasele specificate. Returnează adevărat dacă
prima clasă este subclasă a celei de-a doua clase, ș i fals în alt caz.
clasaCalcul1:
defSummare(self,a,b):
returna+b;
calculClasă2:
defMultiplicare(self,a,b):
returna*b;
classDerived(Calculation1, Calculation2):
defÎmparte(self,a,b):
returnează/b;
d = Derivat()
print(este_subclasă(Derived, Calculation2))
print(issubclass(Calculation1,Calculation2))
Exemplu
1.
clasaCalcul1:
defSumeaza(self,a,b):
returnează a+b;
classCalculare2:
defInmultire(self,a,b):
returna*b;
clasaDerivata(Calcul1, Calcul2):
def Împărț i(self, a, b):
returna/b;
d = Derivat()
print(isinstance(d,Derived))
Suprascrierea metodei
Putem oferi o implementare specifică a metodei din clasa părinte în clasa noastră copil. Când clasa părinte
metoda este definită în clasa copil cu o implementare specifică, atunci conceptul se numeș te suprascrierea metodei.
Este posibil să fie nevoie să efectuam suprascrierea metodei în scenariul în care există o definiț ie diferită a unei metode din clasa părinte.
necesar în clasa copil.
Luaț i în considerare următorul exemplu pentru a efectua suprascrierea metodei în python.
Exemplu
1.
clasăAnimal
defspeak(self):
vorbind
clasăCâine(Animal):
defspeak(self):
Lătrând
d = Câine()
[Link]()
clasaBancă
defgetroi(self):
return10;
clasa SBI(Banc):
defgetroi(self):
return7;
classICICI(Banc):
defgetroi(self):
return8;
Bancă()
SBI()
ICICI()
Rata dobânzii bancare:
print("Rata dobânzii SBI:",[Link]());
print("Rata dobânzii ICICI:", [Link]());
clasaAngajat
__count = 0;
def__init__(self):
Employee.__count = Employee.__count + 1
defdisplay(self):
print("Numărul de angajaț i", Employee.__count)
emp = Angajat()
Angajat()
încercă:
print(emp.__count)
în sfârș it
[Link]()
Abstracție în Python
Abstracț ia este folosită pentru a ascunde funcț ionalitatea internă a funcț iei de utilizatori. Utilizatorii
interacț ionează doar cu implementarea de bază a funcț iei, dar funcț ionarea internă este ascunsă. Utilizatorul este
familiar cu asta "ce funcț ie are" dar nu ș tiu "cum o face."
În cuvinte simple, cu toț ii folosim smartphone-ul ș i suntem foarte familiarizaț i cu funcț iile sale, cum ar fi
cameră, înregistrator vocal, apelare, etc., dar nu ș tim cum se desfăș oară aceste operaț iuni
în fundal. Să luăm un alt exemplu - Când folosim telecomanda televizorului pentru a creș te
volum. Nu ș tim cum apăsarea unei taste creș te volumul televizorului. Ș tim doar să
apasa butonul '+' pentru a creste volumul.
Aceasta este exact abstracț ia care funcț ionează înconcept orientat pe obiecte.
În Python, o abstractizare este folosită pentru a ascunde datele/clasele irelevante pentru a reduce complexitatea. De asemenea, îmbunătăț eș te
eficienț a aplicaț iei. Apoi, vom învăț a cum putem atinge abstractizarea folosindprogram Python.
clasa Tesla(Masina):
def kilometraj(self):
Consum de carburant este de 30km/h
clasaSuzuki(Masina):
def kilometraj(self):
Consum de carburant este 25km/h
clasaDuster(Masina):
def kilometraj(self):
Consumului este de 24 km/h
clasăRenault(Maș ină):
def kilometraj(self):
Consum de combustibil este 27 km/h
# Codul şoferului
t= Tesla ()
[Link]()
r = Renault()
[Link]()
s = Suzuki()
[Link]()
d = Duster()
[Link]()
Explicaț ie -
În codul de mai sus, am importat modulul abc pentru a crea clasa de bază abstractă. Am creat clasa maș ină care...
am moș tenit clasa ABC ș i am definit o metodă abstractă numită mileage(). Apoi am moș tenit clasa de bază din
cele trei subclase diferite ș i am implementat metoda abstractă diferit. Am creat obiectele pentru a apela ...
metodă abstractă.
de la abcimportABC
clasaPolygon(ABC):
#metodăabstractă
def laturi(self):
pasează
clasăTriunghi(Poligon):
def laturi(self):
Triunghiul are 3 laturi
clasaPentagon(Poligon):
def laturi(self):
Pentagonul are 5 laturi
clasăHexagon(Poligon):
def laturi(self):
Hexagonul are 6 laturi
clasa pătrat(Poligon):
def laturi(self):
Am 4 laturi
# Codul ș oferului
t = Triunghi()
[Link]()
s = pătrat()
[Link]()
p = Pentagon()
[Link]()
k = Hexagon()
[Link]()
Explicaț ie -
În codul de mai sus, am definit clasa de bază abstractă numită Polygon ș i, de asemenea, am definit metoda abstractă.
Această clasă de bază este mo ș tenită de diverse subclase. Am implementat metoda abstractă în fiecare subclasă. Noi
a creat obiectul subclaselor ș i a invocat metoda sides(). Implementările ascunse pentru
metoda thesides() din fiecare subclasă intră în joc. Metoda abstractă sides(), definită în
clasa abstractă, nu este niciodată invocată.
Puncte de reținut
Mai jos sunt punctele pe care ar trebui să le reț inem despre clasa de bază abstractă în Python.
o O clasă abstractă poate conț ine atât metode normale, cât ș i metode abstracte.
o O clasă abstractă nu poate fi instanț iată; nu putem crea obiecte pentru clasa abstractă.
Abstracț ia este esenț ială pentru a ascunde funcț ionalitatea de bază de utilizatori. Am acoperit toate conceptele de bază de
Abstracț ie în Python.
Module Python
Un modul Python poate fi definit ca un fiș ier de program Python care conț ine un cod Python, inclusiv funcț ii Python.
clasa sau variabile. Cu alte cuvinte, putem spune că fiș ierul nostru de cod Python salvat cu extensia (.py) este tratat ca
modul. Este posibil să avem un cod executabil în interiorul modulului python.
Exemplu
În acest exemplu, vom crea un modul numit [Link] care conț ine o funcț ie func ce conț ine un cod pentru a printa
un mesaj pe consola.
Aici, trebuie să includem acest modul în modulul nostru principal pentru a apela metoda displayMsg() definită în modul.
fiș ier numit.
Declarația from-import
În loc să importăm întreaga bibliotecă în spaț iul de nume, Python oferă flexibilitatea de a importa doar elementul specific.
atributele unui modul. Acest lucru poate fi realizat folosind instruc ț iunea from? import. Sintaxa pentru a folosi from-import
declaraț ia este dată mai jos.
Consideraț i următorul modul numit calcul, care conț ine trei funcț ii: adunare, înmulț ire ș i
împărț iț i.
[Link]
[Link]
decalculimportsumare
va importa doar summation() din [Link]
a = int(input("Introduceti primul numar"))
b = int(input("Introduceti al doilea numar"))
print("Suma = ", summarea(a, b))#nu trebuie să specificăm numele modulului în timp ce accesăm summarea
Declaraț ia from...import este întotdeauna mai bine de utilizat dacă ș tim atributelor care trebuie importate din modul în
avans. Nu ne permite ca codul nostru să fie mai greoi. De asemenea, putem importa toate atributele dintr-un modul folosind *.
1. din<modul>import*
Renunțarea la un modul
Python ne oferă flexibilitatea de a importa un anumit modul cu un nume specific, astfel încât să putem folosi acest nume pentru a utiliza
acel modul din fiș ierul nostru sursă python.
Exemplu
importăcalculare ca cal;
a = int(input("Introduceț i a?"));
b = int(input("Introduceț i b?"));
print("Sumă = ",[Link](a,b))
Exemplu
importjson
List = dir(json)
print(List)
Funcția reload()
Aș a cum am menț ionat deja, un modul este încărcat o singură dată, indiferent de câte ori este importat în
fiș ier sursă python. Cu toate acestea, dacă doriț i să reîncărcaț i modulul deja importat pentru a re-executa codul de nivel superior,
python ne oferă funcț ia reload(). Sintaxa pentru a folosi funcț ia reload() este dată mai jos.
1. reload(<numele-module>)
de exemplu, pentru a reîncărca modulul de calcul definit în exemplul anterior, trebuie să folosim următoarea linie de
cod.
1 reîncărcare(calcul)
Domeniul variabilelor
În Python, variabilele sunt asociate cu două tipuri de domenii. Toate variabilele definite într-un modul conț in domeniul global.
domeniu de aplicare, cu excepț ia cazului în care este definit în cadrul unei funcț ii.
Toate variabilele definite în interiorul unei funcț ii conț in un domeniu local care este limitat la această funcț ie în sine. Nu putem accesa
o variabilă locală la nivel global.
Dacă două variabile sunt definite cu acelaș i nume în două domenii diferite, adică, local ș i global, atunci prioritatea
va fi întotdeauna atribuit variabilei locale.
Exemplu
john
defprint_nume(nume):
print("Salut", nume) #afişează numele care este local doar acestei funcţii.
introdu numele?
printa_nume(nume)
Pachete Python
Pachetele în python facilitează dezvoltatorului mediu de dezvoltare a aplica ț iilor prin furnizarea unei
structură de directoare ierarhică în care un pachet conț ine sub-pachete, module ș i sub-module. Pachetele
sunt folosite pentru a clasifica eficient codul la nivelul aplicaț iei.
Să creăm un pachet numit Angajaț i în directorul tău de acasă. Ia în considerare următorii paș i.
[Link]
defgetITNames():
List = ["John","David","Nick","Martin"]
returnList;
3. În mod similar, creează un alt fiș ier python cu numele [Link] ș i creează o funcț ie getBPONames().
4. Acum, directorul Angajaț i pe care l-am creat în primul pas conț ine două module python. Pentru a face acest lucru
în directorul unui pachet, trebuie să includem încă un fiș ier aici, adică __init__.py care conț ine instrucț iunile de import ale
modulele definite în acest director.
__init__.py
Acum, directorul Angajaț i a devenit pachetul care conț ine două module python. Aici trebuie să observăm că
trebuie să creăm __init__.py în interiorul unui director pentru a transforma acest director într-un pachet.
6. Pentru a utiliza modulele definite în pachetul Angajaț i, trebuie să le importăm în fiș ierul nostru sursă Python.
Să creăm un fi ș ier sursă Python simplu în directorul nostru de acasă (/home) care folose ș te modulele definite în aceasta
pachet.
[Link]
1 importaAngajaț i
2. print([Link]())
Putem avea sub-pachete în interiorul pachetelor. Putem îmbina pachetele până la orice nivel, în funcț ie de
cerinț e de aplicare.
Următoarea imagine arată structura directorului unui sistem de gestionare a bibliotecilor care conț ine trei
sub-pachete ca Admin, Bibliotecar ș i Student. Sub-pachetele conț in modulele python.