Примірники проти статичних методів проти методів класу в Python: важливі відмінності

Методи Python часто можуть збивати з пантелику, коли ви потрапляєте в об'єктно-орієнтоване програмування (ОВП). Це керівництво охоплює три основні типи методів в Python.

3 типи методів у Python

У Python є три типи методів: методи примірника, статичні методи та методи класу.


Знання відмінностей не завжди потрібне для написання базових скриптів Python, але як тільки ви перейдете до ОВП, відмінності можуть сильно змінитися.

Якщо ви новачок в Python або просто хочете поекспериментувати без установки чогось, переконайтеся, що ви відвідуєте ці інтерактивні інтерактивні оболонки мережевих оболонок.

Перш ніж ми почнемо: Розуміння шаблонів декоратора

Перш ніж розглядати відмінності, важливо зрозуміти шаблон дизайну, відомий як шаблон декоратора або просто званий декоратором.

Декоратори звучать складно, але боятися нічого. Декоратори - це просто функції. Ви можете написати їх самостійно, або використовувати ті, які включені в бібліотеки, або стандартну бібліотеку Python.

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

Шаблон декоратора - це найкращий спосіб визначення статичних або класових методів у Python. Ось як це виглядає в Python:


class DecoratorExample: """""" Example Class """""" def __init__(self): """""" Example Setup """""" print('Hello, World!') @staticmethod def example_function(): """""" This method is decorated! """""" print('I\'ma decorated function!') de = DecoratorExample() de.example_function()

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

Можна об'єднати кілька декораторів, написати свій і застосувати їх до класів, але вам не потрібно нічого робити для цих прикладів.

Методи екземпляра в Python

Методи екземпляра є найбільш поширеним типом методів у класах Python. Вони так називаються, тому що вони можуть отримати доступ до унікальних даних свого примірника. Якщо у вас є два об'єкти, кожен з яких створений з автомобільного класу, то кожен з них може мати різні властивості. Вони можуть мати різні кольори, розміри двигуна, сидіння тощо.

Методи екземпляра повинні мати self як параметр, але вам не потрібно передавати це кожен раз. Self - ще один спеціальний термін Python. Всередині будь-якого методу екземпляра ви можете використовувати self для доступу до будь-яких даних або методів, які можуть знаходитися у вашому класі. Ви не зможете отримати до них доступ, не пройшовши через себе.

Нарешті, оскільки методи примірників є найбільш поширеними, декоратор не потрібен. Кожен створений вами метод буде автоматично створений як метод екземпляра, якщо ви не вкажете Python інакше.

Ось приклад:


class DecoratorExample: """""" Example Class """""" def __init__(self): """""" Example Setup """""" print('Hello, World!') self.name = 'Decorator_Example' def example_function(self): """""" This method is an instance method! """""" print('I\'m an instance method!') print('My name is ' + self.name) de = DecoratorExample() de.example_function()

Змінна name доступна через self. Зверніть увагу, що коли викликається example_function, вам не потрібно передавати self - Python зробить це за вас.

Статичні методи в Python

Статичні методи - це методи, які якимось чином пов'язані з класом, але не потребують доступу до даних, що належать до класу. Вам не потрібно використовувати self, і вам навіть не потрібно створювати екземпляр, ви можете просто викликати свій метод:

class DecoratorExample: """""" Example Class """""" def __init__(self): """""" Example Setup """""" print('Hello, World!') @staticmethod def example_function(): """""" This method is a static method! """""" print('I\'ma static method!') de = DecoratorExample.example_function()

Декоратор @ staticmethod використовувався, щоб повідомити Python, що цей метод є статичним.


Статичні методи відмінно підходять для службових функцій, які виконують завдання ізольовано. Їм не потрібно (і не може) отримати доступ до даних класу. Вони повинні бути повністю автономними і працювати тільки з даними, переданими як аргументи. Ви можете використовувати статичний метод для додавання двох чисел або вивести вказаний рядок.

Методи класу в Python

Методи класу - це третій і останній тип методу ОВП, який потрібно знати. Методи класу знають про їхній клас. Вони не можуть отримати доступ до конкретних даних екземпляра, але можуть викликати інші статичні методи.

Методи класу не потребують self як аргумент, але їм потрібен параметр з назвою cls. Це означає клас, і, як і я, автоматично передається Python.

Методи класу створюються за допомогою декоратора @ classmethod.

class DecoratorExample: """""" Example Class """""" def __init__(self): """""" Example Setup """""" print('Hello, World!') @classmethod def example_function(cls): """""" This method is a class method! """""" print('I\'ma class method!') cls.some_other_function() @staticmethod def some_other_function(): print('Hello!') de = DecoratorExample() de.example_function()


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

Коли використовувати кожен тип методу

Вибір між методами в Python може здатися складним і лякаючим, але незабаром ви освоїте його з невеликою практикою.

Навіть якщо ви пишете тільки крихітні сценарії для розваги, вивчення іншої функції ОВП в Python - це великий навик, який потрібно знати, і він може спростити пошук і усунення несправностей у вашому коді і його повторне використання в майбутньому.

У підсумку:

  1. Методи екземпляра: найпоширеніший тип методу. Можливість доступу до даних і властивостей, унікальних для кожного екземпляра.
  2. Статичні методи: не може отримати доступ ні до чого іншого в класі. Повністю автономний код.
  3. Методи класу: можуть отримати доступ до обмежених методів у класі. Може змінити специфічні для класу деталі.

Якщо це керівництво було трохи просунутим або не зовсім тим, що ви шукали, то чому б не поглянути на ці курси, щоб перейти від початківця Python до професійних? Ці 5 сайтів також відмінно підходять для початківців Python. Якщо вам потрібно фізичне використання Python в реальному світі, але ви втомилися від Raspberry Pi, як щодо нашого керівництва з управління Arduino за допомогою Python керувати Arduino за допомогою Python керувати Arduino з?


COM_SPPAGEBUILDER_NO_ITEMS_FOUND