Истинная приватность в Python - PullRequest
2 голосов
/ 17 сентября 2011

PEP 8 утверждает, что (выделение мое):

Мы не используем здесь термин «приватный», поскольку в Python ни один атрибут не является действительно приватным ( без обычно ненужной суммы).работы ).

Полагаю, это относится к определению фактического класса на каком-то другом языке, а затем к переводчику предоставляются только открытые члены.Есть ли какой-то другой способ достичь истинной приватности в Python?

Я просто из любопытства спрашиваю.

Ответы [ 3 ]

4 голосов
/ 17 сентября 2011

Нет, в Python нет ничего действительно закрытого.

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

Я думаю, вы могли бы придумать хитрый взлом, но этобыть только этим - взломать.В языке нет такой функциональности.

1 голос
/ 17 сентября 2011

(Примечание: это не «приватный» в смысле C ++ / C # / Java тип приватный, но он близок)

Для класса вы можете добавить префикс переменной к '__'. Это заставит Python назвать его mangle так, что вы не сможете случайно вызвать его извне класса. Например:

class Test(object):
    def __init__(self):
        self.__number = 5

a = Test()
print a.__number # name error!

С другой стороны, это не на самом деле личное. Вы можете получить доступ к номеру с помощью:

print a.__Test_number

Но это предотвратит случайные ошибки, которые, в любом случае, должны использоваться для всех. Если перед ним стоит префикс «__», и кто-то использует код, то его вина в том, что этот код сломается позже (они были предупреждены).

0 голосов
/ 17 сентября 2011

Нет настоящей приватности.Лучшее, что вы могли бы сделать - это запутать имя переменной, а затем создать методы получения / установки или свойства.

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

Вы также можете написать программу на другом языке, которая будет отвечать только на определенные классы.Не знаю, как это сделать.

...