Всіх вітаю! У цьому матеріалі ми розберемо суть вбудованих функцій isinstance() та issubclass() та як ними користуватися у коді. Також розглянемо одну з концепцій ООП — наслідування та як воно працює.

Функція isinstance()

Функція isinstance() перевіряє приналежність об’єкту до якогось об’єкту класу. Вона приймає два параметри: об’єкт та об’єкт класу, належність до якого ми хочемо перевірити.

Ось приклад у коді:

test_list = [1, 2, 3, 4, 5]
print(isinstance(test_list, list))

У цьому прикладі ми створили список test_list та перевіряли його приналежність до класу list у Python. У результаті отримуємо:

True

Отримали True. Це означає, що список test_list належить до класу list, тобто список test_list є саме списком і нічим іншим.

Ось ще один приклад використання isinstance():

test_tuple = (1, 2, 3, 4, 5)
print(isinstance(test_tuple, int))
False

Тут ми отримали False, бо ми хотіли перевірити кортеж test_tuple на приналежність до класу int. У підсумку кортеж test_tuple не є цілим числом.

Розглянемо останній приклад, де перевіримо, чи належить словник об’єкту класу dict:

numbers_dict = {
    "One": 1,
    "Two": 2,
    "Three": 3
}

print(isinstance(numbers_dict, dict))
True

Як бачимо, словник numbers_list є словником.

Концепція наслідування у класах

Перед тим як почати вивчення нової функції, я думаю, що треба дещо ознайомитися із концепцію наслідування у Python.

Отже, наслідування — це така концепція у ООП (Об’єктно-орієнтованому програмуванні), яка передбачає, що один клас може наслідувати атрибути або методи іншого класу. Клас, з якого ми наслідуємо називають батьківським класом, а той клас, який наслідує називається дочірнім.

Вважаю, що краще розібрати це на прикладі:

class Main:
    def __init__(self, message):
        self.message = message

    def show_message(self):
        print(self.message)


class Sub (Main):
    def __init__(self, message):
        super().__init__(message)

    def print_text(self):
        print("Message here:")
        super().show_message()


test = Sub("Hi! You're run the code!")
test.print_text()
Message here:
Hi! You're run the code!

Це готовий приклад наслідування і у ньому Main — це батьківський клас, бо саме з нього ми наслідуємо атрибут та метод, а Sub — дочірній, бо якраз-таки він наслідує атрибут message та метод show_message(). Думаю краще розбити даний код на частини і дослідити окремо.

Спочатку ми створюємо клас Main, де створюємо атрибут message та метод show_message():

class Main:
    def __init__(self, message):
        self.message = message

    def show_message(self):
        print(self.message)

Далі створюємо клас Sub, який буде наслідувати атрибут message та метод show_message():

class Sub (Main):
    def __init__(self, message):
        super().__init__(message)

    def print_text(self):
        print("Message here:")
        super().show_message()

Біля класу Sub ми записуємо у дужках клас Main, тобто ми якби кажемо, що клас Sub наслідує від класу Main. Таким чином клас Sub є підкласом Main:

class Sub (Main):

У цьому класі ми застосовуємо функцію super(), яка і дозволяє нам отримувати атрибут message та метод show_message().

Ось у цьому рядку ми отримуємо доступ до атрибуту message з класу Main:

super().__init__(message)

А у цьому отримуємо доступ до методу show_message() з класу Main:

super().show_message()

Тобто у цьому прикладі ми передали за допомогою функції super() атрибут та метод до класу Sub. Щоб позначити, що клас Sub наслідує клас Main треба записати біля Sub у дужках назву класу, від якого ми наслідуємо атрибути/методи.

Наприкінці ми створюємо об’єкт test та викликаємо метод print_text():

test = Sub("Hi! You're run the code!")
test.print_text()

Зверніть увагу, що ми взагалі не чіпаємо батьківський клас Main, тільки дочірній клас Sub.

Функція issubclass()

Функція issubclass() перевіряє, чи є один клас підкласом іншого. Вона приймає два класи — один ми вважаємо підкласом (дочірнім), а інший ми вважаємо батьківським. Ось приклад, де ми перевіряємо клас Sub() на те, чи є він підкласом класу Main().

class Main:
    def __int__(self):
        pass


class Sub (Main):
    def __int__(self):
        pass


print(issubclass(Sub, Main))
True

Тут ми отримали True, так як у коді ми вказали у дужках, що клас Sub є дочірнім класом батьківського класу Main. Тому Sub однозначно є підкласом Main.

Тепер розглянемо протилежний приклад, коли Sub не є підкласом Main:

class Main:
    def __int__(self):
        pass


class Sub:
    def __int__(self):
        pass


print(issubclass(Sub, Main))
False

У цьому випадку Sub вже не є підкласом Main, бо ми не вказали у дужках класу Sub, що він є підкласом Main.

Останнє, що ми розглянемо стосовно функції issubclass() — це її особливість, що клас є підкласом самого себе. Ось приклад такої особливості:

class Main:
    def __int__(self):
        pass


print(issubclass(Main, Main))
True

Ось і отримали True, тобто клас Main є розглядається як підклас самого себе.

Висновок

У цій статті ми познайомилися з двома вбудованими функціями — isinstance() та issubclass(). Крім суті цих функцій, ми також зрозуміли як використовувати їх у коді. Сподіваюся даний матеріал був корисним та зміг пояснити вам концепцію наслідування та їх зв’язок із функцією issubclass().

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader

Нічний читач

197Прочитань
17Автори
7Читачі
На Друкарні з 14 липня

Більше від автора

  • Обчислення похибок вимірювань у Python

    Всіх вітаю! У сьогоднішній статті ми створимо програму для обчислення похибок, а саме абсолютної та відносної. Також детально розглянемо код та протестуємо його.

    Теми цього довгочиту:

    Програмування
  • Функції sorted() та sum() у Python

    Всіх вітаю! У цій статті ми розглянемо дві вбудовані функції під назвами sorted() та sum(). Також наведемо приклади до кожної з цих функцій у коді.

    Теми цього довгочиту:

    Програмування
  • Функції frozenset() та filter() у Python

    Всіх вітаю! Сьогодні ми будемо розглядати вбудовані функції frozenset() та filter(). Будемо розбирати кожгу функцію окремо на основі прикладів.

    Теми цього довгочиту:

    Програмування

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається