Геттеры и сеттеры в Python (классы данных)Python

Программы на Python
Ответить
Anonymous
 Геттеры и сеттеры в Python (классы данных)

Сообщение Anonymous »

Я готовлюсь к вводному курсу программирования в универе, и у меня нет обзора различных случаев, когда дело доходит до сеттеров и геттеров, и слайды не совсем полезны.
Поэтому для контекста мы рассматриваем только классы данных и не используем сеттеры и геттеры с декораторами, вместо этого мы пишем их так:
Скажем, у нас есть класс. Пример:

Код: Выделить всё

from dataclasses import dataclass, InitVar, field

@dataclass
class Example:
'''
Invariant: attr > 0
'''

attr: InitVar[int]
__attr: int = field(init=False)

def __post_init__(self, attr: int) -> None:
self.set_attr(attr)

def get_attr(self) -> int:
return self.__attr

def set_attr(self, attr: int) -> None:
assert attr > 0, "Attribute should be positive"
self.__attr = attr
Из того, что я смог почерпнуть из лекции и других ресурсов, я знаю следующие случаи:
  • Атрибуты изменяемы, поэтому можно написать методы _post_init_(), методы получения и установки, как я это сделал в примере выше.
  • Атрибуты неизменяемы (frozen=True): в этом случае нам понадобится только метод _post_init_() и он будет проверять инвариант там.
  • Атрибуты изменяемы, но мы хотим только читать, а не писать: нам нужен только _post_init_() и метод получения.
Так и будет конкретно, вот мои проблемы с пониманием:
  • Как это работает в случае 3? Проводится ли проверка в _post_init_() так же, как в случае 2?
  • Что произойдет, если инварианта нет? Что нужно делать в _post_init_()?
  • Есть ли еще какие-либо (базовые) случаи, которые я пропустил?
Может быть, мои вопросы тривиальны, но я чувствую, что что-то упускаю, и это заставляет меня чувствовать неуверенность в своей подготовке.
Любой добрый и знающий ответ будет очень ценю. Удачи!

Подробнее здесь: https://stackoverflow.com/questions/798 ... ataclasses
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»