Атрибути класу vs. екземпляра

Вступ до обʼєктно-орієнтованого програмування в Python

George Boorman

Curriculum Manager, DataCamp

Базові принципи ООП

Інкапсуляція:

  • Об'єднання даних і методів

Спадкування:

  • Розширення функціональності наявного коду

Поліморфізм:

  • Створення єдиного інтерфейсу
Вступ до обʼєктно-орієнтованого програмування в Python

Атрибути рівня екземпляра

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • Значення name і salary специфічні для кожного об'єкта
  • self прив'язує до об'єкта
Вступ до обʼєктно-орієнтованого програмування в Python

Атрибути рівня класу

  • Дані, спільні для всіх екземплярів класу

 

  • Визначайте атрибути класу в тілі class

 

  • «Глобальна змінна» всередині класу
Вступ до обʼєктно-орієнтованого програмування в Python

Реалізація атрибутів класу

class Employee:
    # Define a class attribute
    # No self. syntax
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY спільний для всіх екземплярів
  • Не використовуйте self, щоб визначати атрибут класу
  • За домовленістю використовують великі літери
  • Використовуйте ClassName.ATTR_NAME, щоб звертатися до значення атрибута класу
Вступ до обʼєктно-орієнтованого програмування в Python

Атрибути рівня класу

class Employee:
    # Define a class attribute
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Вступ до обʼєктно-орієнтованого програмування в Python

Зміна атрибутів рівня класу

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# Update MIN_SALARY of emp1 emp1.MIN_SALARY = 50000
# Print MIN_SALARY for both employees print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Вступ до обʼєктно-орієнтованого програмування в Python

Зміна атрибутів рівня класу

  • MIN_SALARY створено у визначенні класу

 

  • Оновлення MIN_SALARY в об'єкта не змінює значення у визначенні класу

 

  • Безпека — запобігає небажаним змінам у програмі!
Вступ до обʼєктно-орієнтованого програмування в Python

Навіщо атрибути класу?

Глобальні константи, пов'язані з класом

 

  • Мінімальні та максимальні значення атрибутів
    • Запобігання некоректним даним
  • Поширені значення й константи, напр. host, port для класу Database
    • Уникайте повторів під час створення об'єктів
Вступ до обʼєктно-орієнтованого програмування в Python

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

Вступ до обʼєктно-орієнтованого програмування в Python

Preparing Video For Download...