Атрибуты класса и экземпляра

Введение в объектно-ориентированное программирование на 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...