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