Оператор isinstance и наследование в ООП в Python
Давайте разберем особенности наследования при использовании
функции isinstance. Пусть у нас есть родительский класс
и дочерний:
# Родительский класс:
class ParentClass:
pass
# Дочерний класс:
class ChildClass(ParentClass):
pass
Создадим объект дочернего класса:
obj = ChildClass()
Проверим теперь с помощью isinstance,
принадлежит ли наш объект классу ParentClass
и классу ChildClass:
print(isinstance(obj, ChildClass)) # выведет True
print(isinstance(obj, ParentClass)) # тоже выведет True
Как вы видите из примера - функция isinstance
не делает различия при проверке между родительскими
и дочерними классами.
Не путайтесь - если объект будет действительно
родительского класса то, конечно же, проверка
на принадлежность к дочернему классу вернет
False:
obj = ParentClass() # объект родительского класса
print(isinstance(obj, ParentClass)) # выведет True
print(isinstance(obj, ChildClass)) # выведет False
Сделайте класс User с публичными свойствами
name и surname.
Сделайте класс Employee, который будет
наследовать от класса User и добавлять
свойство salary.
Сделайте класс City с публичными свойствами
name и population.
Создайте 3 объекта класса User,
3 объекта класса Employee,
3 объекта класса City, и в
произвольном порядке запишите их в массив
arr.
Переберите циклом массив arr и выведите
на экран столбец свойств name тех
объектов, которые принадлежат классу User
или потомку этого класса.
Переберите циклом массив arr и выведите
на экран столбец свойств name тех
объектов, которые не принадлежат классу User
или потомку этого класса.
Переберите циклом массив arr и выведите
на экран столбец свойств name тех
объектов, которые принадлежат именно классу
User, то есть не классу City
и не классу Employee.