私は、プライベート変数/メンバー/関数/へのPythonのアプローチの内外のほとんどを知っています...
しかし、外部利用のメソッドとサブクラス利用のメソッドをどう区別するかが決まらない。
次の例を検討してください。
class EventMixin(object):
def subscribe(self, **kwargs):
'''kwargs should be a dict of event -> callable, to be specialized in the subclass'''
def event(self, name, *args, **kwargs):
...
def _somePrivateMethod(self):
...
この例では、subscribe はクラス/オブジェクトの外部ユーザーが使用するメソッドであり、event は外部からではなく、サブクラスの実装によって呼び出されるべきメソッドであることを明確にしたいと思います。
現時点では、パブリック API の両方の部分を考慮しているため、アンダースコアは使用しません。ただし、この特定の状況では、たとえば、外部 API にはアンダースコアを使用せず、サブクラス化可能な API には 1 つのアンダースコアを使用し、プライベート/内部 API には 2 つのアンダースコアを使用する方がクリーンに感じられます。ただし、内部 API を次のように呼び出す必要があるため、扱いにくくなります。
self._EventMixin__somePrivateMethod()
では、コーディング、ドキュメント、またはその他の規則は何ですか?