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