симулировать приватные переменные в python [дубликаты]

Возможный дубликат:
частные члены в питоне

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

Как вы прячете такие переменные, которые вы не хотите показывать за пределами вашего объекта?

Чтобы выяснить, почему мне нужны закрытые переменные, сначала один пример, где невозможность скрыть переменные - это просто неудобство, а затем другой, который действительно является проблемой:

class MyObject(object):
    def __init__(self, length):
        self.length = length
    def __len__(self):
        return length

item = MyObject(5)
item.length
len(item)

Таким образом, у меня есть два способа получить доступ к «длине» элемента здесь. Это всего лишь неудобство и ничего ужасного.

from wares import ImplementationSpecific

class MyThing(object):
    def __init__(self):
        self.__no_access_even_if_useful = ImplementationSpecific()
    def restricted_access(self):
        return self.__no_access_even_if_useful.mutable_value

thing = MyThing()
thing.restricted_access()
thing._MyThing__no_access_even_if_useful.something_useful_for_someone()

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

Я возьму это, как любой мог запрограммировать. Этот «любой» может найти полезную вещь из моих особенностей реализации и использовать ее, даже если бы я сильно отговаривал от этого! Было бы намного проще просто сказать: «Нет, его там нет, попробуй что-нибудь еще».

Ответы на вопрос(2)

Ваш ответ на вопрос