Created
February 13, 2026 14:35
-
-
Save sunmeat/a47344ddbcc19c2aeca972a24984aa9b to your computer and use it in GitHub Desktop.
загальний приклад класу в пайтон
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class AlwaysNounsNotVerbs: | |
| """сlass documentation comment | |
| опис класу: що він робить, для чого призначений | |
| """ | |
| # 1. класові (статичні) змінні - належать класу, спільні для всіх екземплярів | |
| class_counter = 0 | |
| DEFAULT_TIMEOUT = 30 | |
| def __init__(self, name: str, value: int = 0): | |
| """конструктор (метод ініціалізації екземпляра)""" | |
| # 2. екземплярні змінні (instance variables) | |
| self.name = name | |
| self.value = value | |
| self._internal_state = None # приватна (за домовленістю) змінна екземпляра класу | |
| # збільшуємо лічильник створених об'єктів | |
| AlwaysNounsNotVerbs.class_counter += 1 | |
| # 3. звичайні методи екземпляра | |
| def do_something(self, param: str) -> str: | |
| """один з основних методів класу""" | |
| return f"{self.name} зробив {param}" | |
| # 4. статичний метод (не потребує self), логічно належить класу, | |
| # але не має доступу ні до стану екземплярів, ні до стану класу (!!!??? О_О) | |
| @staticmethod # https://www.designgurus.io/answers/detail/what-is-the-difference-between-staticmethod-and-classmethod-in-python | |
| def get_version() -> str: | |
| return "1.0.3" | |
| # одна з ключових відмінностей Python від багатьох інших мов: | |
| # !!! класи — це повноцінні об'єкти з власним станом. | |
| # кожен клас — це об'єкт (конкретний екземпляр свого метакласу, зазвичай type). | |
| # цей об'єкт-клас: | |
| # - існує один на весь клас (не створюється заново при кожному створенні екземпляра) | |
| # - тримає стан класу (те, що спільне для всіх екземплярів) | |
| # - цей стан живе саме в цьому об'єкті-класі | |
| # 5. метод класу (отримує клас як перший аргумент) | |
| # це надбудова, якої бракує в C++/Java/C#, яка дозволяє: | |
| # - писати зручні альтернативні конструктори | |
| # - працювати з підкласами поліморфно | |
| # - змінювати стан класу без створення екземпляра | |
| @classmethod | |
| def from_default(cls) -> 'AlwaysNounsNotVerbs': | |
| return cls("DefaultObject") | |
| # 6. приватний метод (за конвенцією з _ на початку) | |
| def _update_internal(self): | |
| self._internal_state = "updated" | |
| ##################################################################################### | |
| if __name__ == "__main__": | |
| obj1 = AlwaysNounsNotVerbs("Sensor-01", 42) | |
| obj2 = AlwaysNounsNotVerbs.from_default() | |
| print(obj1.do_something("перевірку")) | |
| print(AlwaysNounsNotVerbs.get_version()) | |
| print(f"Створено об'єктів: {AlwaysNounsNotVerbs.class_counter}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment