Инкапсуляция, атрибуты и свойства

Инкапсуляция, атрибуты и свойства

@ProgHelpBot
  1. Инкапсуляция
  2. Аннотации свойств

Инкапсуляция

Предотвращает прямой доступ к атрибутам объект из вызывающего кода. Можно скрыть атрибуты класса сделав их приватными или закрытыми и ограничив доступ к ним через специальные методы, которые еще называются свойствами.

self.__[приватный атрибут] = [значение]

Пример:

class Person:
  def __init__(self, name):
    self.__name = name
    self.__age = 0

  def get_age(self):  # геттер (аксессор)
    return self.__age

  def set_age(self, age):  # сеттер (мьютейтор)
    if 0 <= age <= 100:
      self.__age = age
    else:
      print("Error")

  def get_name(self):  # геттер
    return self.__name


alex = Person("Alex")
alex.set_age(-5)  # Error
alex.set_age(18)
print(alex.get_name(), alex.get_age())  # Alex 18

Аннотации свойств

Имеется еще один способ определения свойств.

Создание геттера:

@property
def [свойство](self, [параметры]):
  [инструкции]

Создание сеттера:

@[свойство].setter
def [свойство](self, [параметры]):
  [инструкции]

Сеттер определяется после геттера. После определения геттера и сеттера обращение к атрибутам класса происходит следующим образом:

[объект].[атрибут]

Пример:

class Person:
  def __init__(self, name):
    self.__name = name
    self.__age = 0

  @property
  def age(self):  # геттер
    return self.__age

  @age.setter
  def age(self, age):  # сеттер
    if 0 <= age <= 100:
      self.__age = age
    else:
      print("Error")

  @property
  def name(self):  # геттер
    return self.__name


alex = Person("Alex")
alex.age = -5  # Error
alex.age = 18
print(alex.name, alex.age)  # Alex 18


← Классы и объекты

→ Наследование

Report Page