Вот как:
class whatever(object):
def __init__(self, a, b, c, ...):
self.__foobar = 1
self.__blahblah = 2
foobar = property(lambda self: self.__foobar)
blahblah = property(lambda self: self.__blahblah)
(Предполагая, что foobar
и blahblah
являются атрибутами, которые вы хотите использовать только для чтения.) Добавление двух подчеркиваний к имени атрибута эффективно скрывает его за пределами класса, поэтому внутренние версии выиграли не быть доступным снаружи. Это работает только для классов нового стиля, наследуемых от объекта , поскольку оно зависит от property
.
С другой стороны ... это довольно глупо. Сохранение приватности переменных, похоже, навязчивая идея C ++ и Java. Ваши пользователи должны использовать общедоступный интерфейс для вашего класса, потому что он хорошо продуман, а не потому, что вы заставляете их.
Редактировать: Похоже, Кевин уже опубликовал похожую версию.