Я не знаю, когда атрибут должен быть закрытым, и если я должен использовать свойство.
Недавно я читал, что сеттеры и геттеры не являются питоническими, и я должен использовать декоратор свойств. Все в порядке.
Но что, если у меня есть атрибут, который не должен быть установлен извне класса, но может быть прочитан (атрибут только для чтения). Должен ли этот атрибут быть закрытым, а частным - под знаком подчеркивания, например self._x
?
Если да, то как я могу прочитать его без использования getter?
Только метод, который я знаю прямо сейчас, это написать
@property
def x(self):
return self._x
Таким образом, я могу читать атрибут obj.x
, но я не могу установить его obj.x = 1
, так что это нормально.
Но должен ли я действительно заботиться об установке объекта, который не должен быть установлен? Может быть, я просто оставлю это. Но опять-таки я не могу использовать подчеркивание, потому что чтение obj._x
нечетно для пользователя, поэтому я должен использовать obj.x
, а затем снова пользователь не знает, что он не должен устанавливать этот атрибут.
Какое ваше мнение и практика?