У меня есть класс, который реализует стратегию. В рамках более широкого стратегического API он имеет открытый интерфейс. В этом конкретном классе main_method
применяет различные условия и для каждого условия имеет метод helper_...
. Таким образом, путем подклассификации и переопределения этих вспомогательных методов вы можете изменить поведение стратегии. Это предназначено. Однако эти вспомогательные методы не являются частью API, который реализуется/подвергается воздействию клиента.Методы, предназначенные для переопределения, но не являющиеся частью общедоступного API
Мне кажется, что эти методы следует считать приватными, поскольку они не являются частью интерфейса, который реализуется, но, с другой стороны, они предназначены для переопределения подклассами. В Java они будут «защищены».
Что такое питонический способ справиться с этой ситуацией? Мой код схематичен следующим образом:
class BasicFoo(Object):
def __init__(self):
pass
def main_method(self, input) :
if condition_1 :
self._helper1(input)
elif condition_2 :
self._helper2(input)
else :
self._helper3(input)
def _helper1(self, input)
# do something
def _helper2(self, input):
# do something else
def _helper3(self, input):
# do something else again
class ModifiedFoo(BasicFoo):
def __init__(self):
super(ModifiedFoo, self).__init__()
def _helper1(self, input):
# a different behaviour
В чем проблема с тем, что вы имеете сейчас? Кто выполняет эти подклассы? Есть ли у них проблема с переопределением методов private-by-convention? – jonrsharpe
Я думаю, что лучшее место для этого было бы здесь: http://codereview.stackexchange.com/ –
@DeanFenster Или вы могли бы [прочитать, что по теме для обзора кода] (http://codereview.stackexchange.com/help/on-topic) и узнайте, что гипотетический код будет закрыт сразу же. –