Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created February 13, 2026 14:35
Show Gist options
  • Select an option

  • Save sunmeat/a47344ddbcc19c2aeca972a24984aa9b to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/a47344ddbcc19c2aeca972a24984aa9b to your computer and use it in GitHub Desktop.
загальний приклад класу в пайтон
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