Анатомія класу: конструктор __init__

Об'єктноорієнтоване програмування в Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Методи й атрибути

  • Методи — це визначення функцій у класі
  • self як перший аргумент
  • Визначайте атрибути через присвоєння
  • Звертайтесь до атрибутів у класі як self.___

   

class MyClass:
    # визначення функції в класі
    # перший аргумент — self
    def my_method1(self, other_args...):
        # код тут

    def my_method2(self, my_attr):        
        # атрибут створюється присвоєнням
        self.my_attr = my_attr
        ...
Об'єктноорієнтоване програмування в Python

Конструктор

  • Додати дані до об'єкта під час створення?
  • Метод‑конструктор __init__() викликається щоразу, коли створюється об'єкт.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Створюємо атрибут .name і задаємо йому значення параметра name
        print("The __init__ method was called")

cust = Customer("Lara de Silva") #<--- __init__ викликається неявно print(cust.name)
The __init__ method was called
Lara de Silva
Об'єктноорієнтоване програмування в Python
class Customer:
       def __init__(self, name, balance):  # <-- додано параметр balance

self.name = name self.balance = balance # <-- додано атрибут balance print("The __init__ method was called")
cust = Customer("Lara de Silva", 1000) # <-- викликається __init__ print(cust.name) print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Об'єктноорієнтоване програмування в Python
class Customer:
       def __init__(self, name, balance=0):  #<-- встановлюємо типове значення для balance

self.name = name self.balance = balance print("The __init__ method was called")
cust = Customer("Lara de Silva") # <-- balance не вказуємо явно
print(cust.name) print(cust.balance) # <-- атрибут все одно створено
The __init__ method was called
Lara de Silva
0
Об'єктноорієнтоване програмування в Python

Атрибути в методах

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- attr1 створено
obj.my_method2(val2) # <-- attr2 створено

Атрибути в конструкторі

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Усі атрибути створені obj = MyClass(val1, val2)
  • легше знати всі атрибути
  • атрибути створюються під час створення об'єкта
  • зручніший і підтримуваніший код
Об'єктноорієнтоване програмування в Python

Найкращі практики

1. Ініціалізуйте атрибути в __init__()
Об'єктноорієнтоване програмування в Python

Найкращі практики

1. Ініціалізуйте атрибути в __init__()
2. Іменування

CamelCase для класів, lower_snake_case для функцій і атрибутів

Об'єктноорієнтоване програмування в Python

Найкращі практики

1. Ініціалізуйте атрибути в __init__()
2. Іменування

CamelCase для класів, lower_snake_case для функцій і атрибутів

3. Залишайте self як self
class MyClass:
    # Це працює, але не рекомендується
    def my_method(kitty, attr):
       kitty.attr = attr
Об'єктноорієнтоване програмування в Python

Найкращі практики

1. Ініціалізуйте атрибути в __init__()
2. Іменування

CamelCase для класів, lower_snake_case для функцій і атрибутів

3. self — це self
4. Використовуйте докстрінги
class MyClass:
    """Цей клас нічого не робить"""
    pass
Об'єктноорієнтоване програмування в Python

Давайте потренуємось!

Об'єктноорієнтоване програмування в Python

Preparing Video For Download...