Друкарня від WE.UA

Всіх вітаю! У цьому матеріалі ми розберемо суть вбудованих функцій 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

Нічний читач

443Прочитань
21Автори
12Читачі
Підтримати
На Друкарні з 14 липня

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

Це також може зацікавити:

  • Кібервійна в Україні так само важлива, як і битва в окопах

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

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

    Війна
  • Перший досвід роботи в IT

    Багато роботодавців вимагають наявності досвіду роботи у команді, але багато хто не розуміє та не знає де його взяти. Тому я вирішила поділитись перевіреними ресурсами, де можна отримати перший досвід роботи в IT)

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

    It
  • Що таке принципи безпеки?

    Кожному принципу безпеки автоматично присвоюється ідентифікатор безпеки (SID) під час його створення. У Windows Server 2003 реєстраційні записи безпеки є основою для контролю доступу до ресурсів, що охороняються.

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

    Безпека В Інтернеті

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

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

Це також може зацікавити:

  • Кібервійна в Україні так само важлива, як і битва в окопах

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

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

    Війна
  • Перший досвід роботи в IT

    Багато роботодавців вимагають наявності досвіду роботи у команді, але багато хто не розуміє та не знає де його взяти. Тому я вирішила поділитись перевіреними ресурсами, де можна отримати перший досвід роботи в IT)

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

    It
  • Що таке принципи безпеки?

    Кожному принципу безпеки автоматично присвоюється ідентифікатор безпеки (SID) під час його створення. У Windows Server 2003 реєстраційні записи безпеки є основою для контролю доступу до ресурсів, що охороняються.

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

    Безпека В Інтернеті