Как проверить, является ли класс подклассом другого в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли один класс подклассом другого класса в Python. Это включает изучение наследования классов, фундаментального концепта в объектно-ориентированном программировании.

Вы начнете с создания родительского класса Animal с конструктором и методом speak. Затем вы создадите дочерние классы Dog и Cat, которые наследуются от Animal и переопределяют метод speak. Наконец, вы научитесь использовать функцию issubclass() и проверять атрибут __bases__ для определения отношений между подклассами.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") subgraph Lab Skills python/build_in_functions -.-> lab-559501{{"Как проверить, является ли класс подклассом другого в Python"}} python/classes_objects -.-> lab-559501{{"Как проверить, является ли класс подклассом другого в Python"}} python/inheritance -.-> lab-559501{{"Как проверить, является ли класс подклассом другого в Python"}} end

Исследование наследования классов

На этом этапе вы узнаете о наследовании классов, фундаментальном концепте объектно-ориентированного программирования (ООП). Наследование позволяет создавать новые классы (дочерние классы), которые наследуют атрибуты и методы от существующих классов (родительских классов). Это способствует повторному использованию кода и помогает создавать более организованный и поддерживаемый код.

Начнем с создания простого родительского класса под названием Animal:

## Create a file named animal.py in the ~/project directory
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print("Generic animal sound")

Откройте редактор VS Code и создайте новый файл с именем animal.py в директории ~/project. Скопируйте и вставьте приведенный выше код в файл. Этот класс имеет метод __init__ (конструктор), который инициализирует атрибут name, и метод speak, который выводит общее звук животного.

Теперь создадим дочерний класс Dog, который наследуется от класса Animal:

## Add the following code to animal.py
class Dog(Animal):
    def speak(self):
        print("Woof!")

Добавьте приведенный выше код в файл animal.py. Класс Dog наследуется от Animal, указав Animal в скобках после имени класса. Класс Dog также переопределяет метод speak, чтобы предоставить свою собственную конкретную реализацию.

Далее создадим еще один дочерний класс Cat, который также наследуется от класса Animal:

## Add the following code to animal.py
class Cat(Animal):
    def speak(self):
        print("Meow!")

Добавьте приведенный выше код в файл animal.py. Класс Cat также наследуется от Animal и переопределяет метод speak.

Теперь создадим основную программу для использования этих классов:

## Create a file named main.py in the ~/project directory
from animal import Animal, Dog, Cat

animal = Animal("Generic Animal")
dog = Dog("Buddy")
cat = Cat("Whiskers")

animal.speak()
dog.speak()
cat.speak()

Создайте новый файл с именем main.py в директории ~/project и скопируйте и вставьте приведенный выше код в файл. Эта программа импортирует классы Animal, Dog и Cat из файла animal.py. Затем она создает экземпляры каждого класса и вызывает их методы speak.

Чтобы запустить программу, откройте терминал в VS Code и перейдите в директорию ~/project:

cd ~/project

Затем выполните скрипт main.py с помощью команды python:

python main.py

Вы должны увидеть следующий вывод:

Generic animal sound
Woof!
Meow!

Это демонстрирует, как классы Dog и Cat наследуются от класса Animal и предоставляют свои собственные конкретные реализации метода speak. Это простой пример наследования классов в Python.

Использование функции issubclass()

На этом этапе вы научитесь использовать функцию issubclass() для проверки, является ли один класс подклассом другого класса. Эта функция является встроенной функцией Python, которая возвращает True, если первый аргумент является подклассом второго аргумента, и False в противном случае.

Продолжая пример из предыдущего этапа, давайте используем функцию issubclass() для проверки отношений между классами Animal, Dog и Cat.

Откройте редактор VS Code и создайте новый файл с именем issubclass_example.py в директории ~/project. Скопируйте и вставьте следующий код в файл:

## Create a file named issubclass_example.py in the ~/project directory
from animal import Animal, Dog, Cat

print(issubclass(Dog, Animal))
print(issubclass(Cat, Animal))
print(issubclass(Dog, Cat))
print(issubclass(Animal, Dog))
print(issubclass(Animal, Animal))

Эта программа импортирует классы Animal, Dog и Cat из файла animal.py, который вы создали на предыдущем этапе. Затем она использует функцию issubclass() для проверки следующих отношений:

  • Является ли Dog подклассом Animal?
  • Является ли Cat подклассом Animal?
  • Является ли Dog подклассом Cat?
  • Является ли Animal подклассом Dog?
  • Является ли Animal подклассом самого себя?

Чтобы запустить программу, откройте терминал в VS Code и перейдите в директорию ~/project:

cd ~/project

Затем выполните скрипт issubclass_example.py с помощью команды python:

python issubclass_example.py

Вы должны увидеть следующий вывод:

True
True
False
False
True

Этот вывод показывает, что:

  • Dog является подклассом Animal (True)
  • Cat является подклассом Animal (True)
  • Dog не является подклассом Cat (False)
  • Animal не является подклассом Dog (False)
  • Animal является подклассом самого себя (True)

Функция issubclass() полезна для проверки отношений наследования между классами в вашем коде. Это может помочь убедиться, что ваш код работает как ожидается, и написать более надежный и поддерживаемый код.

Проверка атрибута **bases**

На этом этапе вы узнаете, как проверить атрибут __bases__ класса, чтобы найти его непосредственные родительские классы. Атрибут __bases__ представляет собой кортеж, содержащий родительские классы данного класса.

Продолжая пример из предыдущих этапов, давайте проверим атрибут __bases__ классов Animal, Dog и Cat.

Откройте редактор VS Code и создайте новый файл с именем bases_example.py в директории ~/project. Скопируйте и вставьте следующий код в файл:

## Create a file named bases_example.py in the ~/project directory
from animal import Animal, Dog, Cat

print(Dog.__bases__)
print(Cat.__bases__)
print(Animal.__bases__)

Эта программа импортирует классы Animal, Dog и Cat из файла animal.py, который вы создали на предыдущих этапах. Затем она выводит атрибут __bases__ каждого класса.

Чтобы запустить программу, откройте терминал в VS Code и перейдите в директорию ~/project:

cd ~/project

Затем выполните скрипт bases_example.py с помощью команды python:

python bases_example.py

Вы должны увидеть следующий вывод:

(<class 'animal.Animal'>,)
(<class 'animal.Animal'>,)
(<class 'object'>,)

Этот вывод показывает, что:

  • Класс Dog наследуется от класса Animal.
  • Класс Cat наследуется от класса Animal.
  • Класс Animal наследуется от класса object, который является базовым классом для всех классов в Python.

Атрибут __bases__ полезен для понимания иерархии наследования ваших классов. Это может помочь при отладке и при написании более поддерживаемого кода.

Резюме

В этом практическом занятии (лабораторной работе) вы изучили наследование классов в Python, которое является ключевым концептом объектно-ориентированного программирования. Вы создали родительский класс Animal с конструктором и методом speak, а затем определили дочерние классы Dog и Cat, которые наследуются от Animal.

Эти дочерние классы переопределили метод speak, чтобы предоставить свои собственные конкретные реализации, показав, как наследование позволяет повторно использовать код и создавать специализированные версии. Наконец, вы создали экземпляры этих классов и вызвали их методы speak, чтобы увидеть различные выводы.