Классы "Друг" в python

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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