Введение
В этом практическом занятии (лабораторной работе) вы исследуете классы и экземпляры в Python и узнаете, как проверить, является ли объект экземпляром класса. Вы начнете с создания класса Dog с атрибутами класса и экземпляра, а затем создадите экземпляры класса Dog и обратитесь к их атрибутам.
Затем вы научитесь использовать функцию isinstance() для проверки типа и сравните ее с функцией type() для точного соответствия. Это позволит вам определить, принадлежит ли объект определенному классу или подклассу этого класса, что даст более глубокое понимание объектно-ориентированного программирования в Python.
Изучить классы и экземпляры
На этом этапе вы узнаете о классах и экземплярах в Python. Классы похожи на чертежи для создания объектов, а экземпляры - это фактические объекты, созданные по этим чертежам. Понимание классов и экземпляров является фундаментом объектно-ориентированного программирования в Python.
Сначала создадим простой класс с именем Dog.
Откройте редактор VS Code в среде LabEx.
Создайте новый файл с именем
dog.pyв директории~/project.~/project/dog.pyДобавьте следующий код в файл
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.Теперь создадим экземпляры класса
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) с помощью точечной нотации (.).Чтобы запустить скрипт
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().
Откройте редактор VS Code в среде LabEx.
Создайте новый файл с именем
type_check.pyв директории~/project.~/project/type_check.pyСкопируйте определение класса
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Теперь добавим некоторый код для использования функции
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.Чтобы запустить скрипт
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() для проверки типа экземпляров.
Откройте редактор VS Code в среде LabEx.
Измените файл
type_check.pyв директории~/project.~/project/type_check.pyДобавьте новый класс с именем
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.Теперь добавим некоторый код для использования функций
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()для проверки их типов.Чтобы запустить скрипт
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, присвоив значения их конкретным атрибутам. Наконец, вы обратились как к атрибутам экземпляра (имя, возраст), так и к атрибуту класса (вид) с использованием точечной нотации, показав, как получать информацию, связанную с объектами и их классами.



