«Дружеские» занятия в питоне - PullRequest
12 голосов
/ 14 июня 2011

Есть ли способ сделать определенные переменные в классах "приватными" (или какими-либо self.__var на самом деле), но быть доступными для другого класса, например, друзей в c ++, кроме как в python? Я не хочу, чтобы переменные в любом классе были запутаны. Также я не хочу копировать весь код и преобразовывать его для второго класса.

Ответы [ 3 ]

17 голосов
/ 14 июня 2011

Нет, такой опции нет.

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

7 голосов
/ 14 июня 2011

Философия Python заключается в том, что такие вопросы, как контроль доступа, зависят от дисциплины программиста.Он не пытается кодировать на языке, какие части программы являются внутренними деталями реализации, а какие являются частью документированного интерфейса.Таким образом, ему не нужны такие конструкции, как friend, чтобы попытаться объявить, какие другие части программы являются частью реализации класса, а какие - просто клиентами.

Идея состоит в том, что если вы можете 'Если вы пишете / проектируете / документируете / используете хороший код без частичного кодирования этих понятий в вашей программе, вы, вероятно, не сможете сделать это, когда будете их кодировать.Поэтому лучше не иметь таких конструкций в языке, так как они не увеличивают выразительную силу языка и иногда мешают.

1 голос
/ 14 июня 2011

Понятия не имею, о чем вы говорите.

>>> class Foo(object):
...   __bar = 42
... 
>>> class Quux(object):
...   def spam(self):
...     print Foo._Foo__bar
... 
>>> q = Quux()
>>> q.spam()
42
...