Как проверить, является ли объект экземпляром класса в Python

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

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

Введение

В этом практическом занятии (лабораторной работе) вы исследуете классы и экземпляры в Python и узнаете, как проверить, является ли объект экземпляром класса. Вы начнете с создания класса Dog с атрибутами класса и экземпляра, а затем создадите экземпляры класса Dog и обратитесь к их атрибутам.

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


Skills Graph

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

Исследование классов и экземпляров

На этом этапе вы узнаете о классах и экземплярах в Python. Классы похожи на чертежи для создания объектов, а экземпляры - это фактические объекты, созданные по этим чертежам. Понимание классов и экземпляров является фундаментом объектно-ориентированного программирования в Python.

Сначала создадим простой класс с именем Dog.

  1. Откройте редактор VS Code в среде LabEx.

  2. Создайте новый файл с именем dog.py в директории ~/project.

    ~/project/dog.py
  3. Добавьте следующий код в файл dog.py:

    ## Define a class called Dog
    class Dog:
        ## Class attribute
        species = "Canis familiaris"
    
        ## Instance attribute
        def __init__(self, name, age):
            self.name = name
            self.age = age

    Здесь мы определяем класс с именем Dog. Атрибут species является атрибутом класса, то есть он общий для всех экземпляров класса Dog. Метод __init__ - это специальный метод, называемый конструктором. Он используется для инициализации атрибутов экземпляра name и age при создании нового объекта класса Dog.

  4. Теперь создадим экземпляры класса Dog. Добавьте следующий код в конец файла dog.py:

    ## Create instances of the Dog class
    buddy = Dog("Buddy", 9)
    miles = Dog("Miles", 4)
    
    ## Access instance attributes
    print(f"{buddy.name} is {buddy.age} years old.")
    print(f"{miles.name} is {miles.age} years old.")
    
    ## Access class attribute
    print(f"{buddy.name} is a {buddy.species}.")
    print(f"{miles.name} is a {miles.species}.")

    В этой части мы создаем два экземпляра класса Dog: buddy и miles. Затем мы обращаемся к их атрибутам экземпляра (name и age) и атрибуту класса (species) с помощью точечной нотации (.).

  5. Чтобы запустить скрипт dog.py, откройте терминал в VS Code и выполните следующую команду:

    python dog.py

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

    Buddy is 9 years old.
    Miles is 4 years old.
    Buddy is a Canis familiaris.
    Miles is a Canis familiaris.

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

Использование функции isinstance() для проверки типа

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

Построим на основе класса Dog из предыдущего этапа и создадим новый файл Python для изучения функции isinstance().

  1. Откройте редактор VS Code в среде LabEx.

  2. Создайте новый файл с именем type_check.py в директории ~/project.

    ~/project/type_check.py
  3. Скопируйте определение класса Dog из файла dog.py в файл type_check.py. Теперь ваш файл type_check.py должен выглядеть следующим образом:

    class Dog:
        species = "Canis familiaris"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
  4. Теперь добавим некоторый код для использования функции isinstance(). Добавьте следующий код в конец файла type_check.py:

    ## Create instances of the Dog class
    buddy = Dog("Buddy", 9)
    miles = Dog("Miles", 4)
    
    ## Check if buddy is an instance of the Dog class
    print(isinstance(buddy, Dog))
    
    ## Check if miles is an instance of the Dog class
    print(isinstance(miles, Dog))
    
    ## Check if a string is an instance of the Dog class
    print(isinstance("Hello", Dog))

    Здесь мы создаем два экземпляра класса Dog, buddy и miles. Затем мы используем функцию isinstance() для проверки, являются ли эти экземпляры объектами типа Dog. Мы также проверяем, является ли строка "Hello" экземпляром класса Dog.

  5. Чтобы запустить скрипт type_check.py, откройте терминал в VS Code и выполните следующую команду:

    python type_check.py

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

    True
    True
    False

    Вывод показывает, что buddy и miles действительно являются экземплярами класса Dog, в то время как строка "Hello" - нет.

Сравнение с использованием функции type() для точного соответствия

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

Для иллюстрации различия создадим подкласс класса Dog и затем используем как isinstance(), так и type() для проверки типа экземпляров.

  1. Откройте редактор VS Code в среде LabEx.

  2. Измените файл type_check.py в директории ~/project.

    ~/project/type_check.py
  3. Добавьте новый класс с именем GermanShepherd, который наследуется от класса Dog. Теперь ваш файл type_check.py должен выглядеть следующим образом:

    class Dog:
        species = "Canis familiaris"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    class GermanShepherd(Dog):
        def __init__(self, name, age, training_level):
            super().__init__(name, age)
            self.training_level = training_level

    Здесь GermanShepherd - это подкласс класса Dog. Он наследует атрибуты name и age от класса Dog и добавляет новый атрибут training_level.

  4. Теперь добавим некоторый код для использования функций isinstance() и type(). Добавьте следующий код в конец файла type_check.py:

    ## Create instances of the Dog and GermanShepherd classes
    buddy = Dog("Buddy", 9)
    sparky = GermanShepherd("Sparky", 3, "Advanced")
    
    ## Check types using isinstance()
    print(f"buddy isinstance Dog: {isinstance(buddy, Dog)}")
    print(f"sparky isinstance Dog: {isinstance(sparky, Dog)}")
    print(f"sparky isinstance GermanShepherd: {isinstance(sparky, GermanShepherd)}")
    
    ## Check types using type()
    print(f"type(buddy) == Dog: {type(buddy) == Dog}")
    print(f"type(sparky) == Dog: {type(sparky) == Dog}")
    print(f"type(sparky) == GermanShepherd: {type(sparky) == GermanShepherd}")

    В этой части мы создаем экземпляр класса Dog (buddy) и экземпляр класса GermanShepherd (sparky). Затем мы используем isinstance() и type() для проверки их типов.

  5. Чтобы запустить скрипт type_check.py, откройте терминал в VS Code и выполните следующую команду:

    python type_check.py

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

    buddy isinstance Dog: True
    sparky isinstance Dog: True
    sparky isinstance GermanShepherd: True
    type(buddy) == Dog: True
    type(sparky) == Dog: False
    type(sparky) == GermanShepherd: True

    Вывод показывает, что isinstance(sparky, Dog) возвращает True, потому что sparky является экземпляром класса GermanShepherd, который является подклассом класса Dog. Однако type(sparky) == Dog возвращает False, потому что type(sparky) возвращает точный тип, который является GermanShepherd, а не Dog.

Итог

В этом практическом занятии вы изучили основы классов и экземпляров в Python. Вы узнали, как определить класс, включая атрибуты класса и атрибуты экземпляра, инициализируемые в конструкторе __init__.

Затем вы создали экземпляры класса Dog, присвоив значения их конкретным атрибутам. Наконец, вы обратились как к атрибутам экземпляра (имя, возраст), так и к атрибуту класса (вид) с использованием точечной нотации, показав, как получать информацию, связанную с объектами и их классами.