Clase interioare în Python
Python îți permite să definești o clasă în interiorul altei clase. Această clasă interioară poate folosi proprietățile și metodele clasei exterioare atunci când primește un obiect al clasei exterioare.
Când o clasă este necesară într-un singur loc, dacă o definești în interiorul altei clase, păstrezi împreună codul înrudit, iar programul tău este mai bine organizat.
Exemplu
Definește o clasă interioară:
Ieșire: program Python complet
class Outer:
def __init__(self):
self.name = "Outer Class"
class Inner:
def __init__(self):
self.name = "Inner Class"
def display(self):
print("Aceasta este clasa interioară")
outer = Outer()
print(outer.name)
Accesarea clasei interioare din exterior
Accesul la clasa interioară din exterior se face în doi pași: mai întâi construiești un obiect al clasei exterioare, apoi îl folosești pentru a construi un obiect al clasei interioare:
Exemplu
Construiește un obiect al clasei interioare și apelează-i metoda:
Ieșire: program Python complet
class Outer:
def __init__(self):
self.name = "Outer"
class Inner:
def __init__(self):
self.name = "Inner"
def display(self):
print("Salut din clasa interioară")
outer = Outer()
inner = outer.Inner()
inner.display()
Accesarea clasei exterioare din clasa interioară
Un obiect al clasei interioare nu primește automat o legătură cu o instanță a clasei exterioare.
Pentru această legătură, transmite instanța clasei exterioare către clasa interioară ca parametru:
Exemplu
Dă clasei interioare o instanță a clasei exterioare:
Ieșire: program Python complet
class Outer:
def __init__(self):
self.name = "Emil"
class Inner:
def __init__(self, outer):
self.outer = outer
def display(self):
print(f"Numele clasei exterioare: {self.outer.name}")
outer = Outer()
inner = outer.Inner(outer)
inner.display()
Exemplu practic
O utilizare frecventă a unei clase interioare este o clasă ajutătoare care are sens doar alături de clasa ei exterioară:
Exemplu
Motorul unei mașini, modelat ca o clasă interioară:
Ieșire: program Python complet
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
self.engine = self.Engine()
class Engine:
def __init__(self):
self.status = "Off"
def start(self):
self.status = "Running"
print("Motorul a pornit")
def stop(self):
self.status = "Off"
print("Motorul s-a oprit")
def drive(self):
if self.engine.status == "Running":
print(f"Conduceți mașina: {self.brand} {self.model}")
else:
print("Mai întâi porniți motorul!")
car = Car("Toyota", "Corolla")
car.drive()
car.engine.start()
car.drive()
Mai multe clase interioare
Nimic nu te limitează la o singură clasă interioară; o clasă poate conține mai multe:
Exemplu
O clasă cu două clase interioare:
Ieșire: program Python complet
class Computer:
def __init__(self):
self.cpu = self.CPU()
self.ram = self.RAM()
class CPU:
def process(self):
print("Se procesează datele...")
class RAM:
def store(self):
print("Se stochează datele...")
computer = Computer()
computer.cpu.process()
computer.ram.store()