Python Внутренние классы
Python позволяет определить класс внутри другого класса. Такой внутренний класс может использовать свойства и методы внешнего класса, если ему передан объект внешнего класса.
Если класс нужен только в одном месте, определение его внутри другого класса позволяет держать связанный код вместе и лучше организовать программу.
Пример
Определите внутренний класс:
Вывод: полная программа на Python
class Outer:
def __init__(self):
self.name = "Outer Class"
class Inner:
def __init__(self):
self.name = "Inner Class"
def display(self):
print("Это внутренний класс")
outer = Outer()
print(outer.name)
Доступ к внутреннему классу снаружи
Чтобы получить доступ к внутреннему классу снаружи, нужно сделать два шага: сначала создать объект внешнего класса, а затем с его помощью создать объект внутреннего класса:
Пример
Создайте объект внутреннего класса и вызовите его метод:
Вывод: полная программа на Python
class Outer:
def __init__(self):
self.name = "Outer"
class Inner:
def __init__(self):
self.name = "Inner"
def display(self):
print("Привет из внутреннего класса")
outer = Outer()
inner = outer.Inner()
inner.display()
Доступ к внешнему классу из внутреннего класса
Объект внутреннего класса не получает автоматически связь с экземпляром внешнего класса.
Чтобы создать такую связь, передайте экземпляр внешнего класса во внутренний класс как параметр:
Пример
Передайте внутреннему классу экземпляр внешнего класса:
Вывод: полная программа на Python
class Outer:
def __init__(self):
self.name = "Emil"
class Inner:
def __init__(self, outer):
self.outer = outer
def display(self):
print(f"Имя внешнего класса: {self.outer.name}")
outer = Outer()
inner = outer.Inner(outer)
inner.display()
Практический пример
Внутренний класс часто используют как вспомогательный класс, который имеет смысл только вместе со своим внешним классом:
Пример
Двигатель автомобиля, смоделированный как внутренний класс:
Вывод: полная программа на Python
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("Двигатель запущен")
def stop(self):
self.status = "Off"
print("Двигатель остановлен")
def drive(self):
if self.engine.status == "Running":
print(f"Едем на {self.brand} {self.model}")
else:
print("Сначала запустите двигатель!")
car = Car("Toyota", "Corolla")
car.drive()
car.engine.start()
car.drive()
Несколько внутренних классов
Вы не ограничены одним внутренним классом: класс может содержать несколько таких классов:
Пример
Класс с двумя внутренними классами:
Вывод: полная программа на Python
class Computer:
def __init__(self):
self.cpu = self.CPU()
self.ram = self.RAM()
class CPU:
def process(self):
print("Обработка данных...")
class RAM:
def store(self):
print("Сохранение данных...")
computer = Computer()
computer.cpu.process()
computer.ram.store()