Python: публичные методы, вызывающие свои "братские" частные методы

Я пишу код на Python всего пару недель, так что я до сих пор выясняю, в чем заключается земля. Но допустим, у меня есть метод, который МОЖЕТ вызываться "пользователем" иногда, а также использоваться HEAVILY для внутреннего использования (т. Е. Аргументы уже проверены перед вызовом). Вот что я сейчас делаю:

#The method the 'user' should call:
def do_something(self, arg1, arg2, arg3):
    #write code to do error checking on arg1, agr2, arg3
    #raise exceptions, return codes, etc: depends on whether you are an explicit lover
    #or an implicit lover, it seems. :-)
    ... error checking code here...
    #Now call the 'brother' method that does the real work.
    return self._do_something(self, arg1, arg2, arg3, arg3)

#The method other private methods should call with already validated parameters
def _do_something(self, arg1, arg2, arg3, arg3):
    #don't do error checking on the parameters. get to work...
    ... do what you do...
    return whatever you're supposed to return

Это кажется логичным для меня. Есть ли лучший способ сделать это на Python?

Павел

4 ответа

Решение

Это хорошо. Тем не менее, вызов метода "брата" неверен в вашем коде. Вы должны сделать это так:

# Now call the 'brother' method that does the real work.
return self._do_something(arg1, arg2, arg3, arg3)

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

Хорошо, если код проверки ошибок не очень дорогой, у меня будет только один метод, который всегда выполняет проверку ошибок. Он может повторять некоторые проверки, но он предлагает вам больше безопасности, и может пригодиться, если кто-то унаследует от вашего класса.

Если позже вам понадобится производительность, вы всегда можете кэшировать результаты или делать что-то еще.

В python нет "истинной" поддержки закрытых членов, но питонский способ обозначить члена как частного - использовать два ведущих подчеркивания. В твоем случае, __do_something,

Для получения дополнительной информации см. Python.org - классы

Я просто изучаю Python (и наслаждаюсь им), но я думаю, что это способ сделать это. Однако закрытый метод должен иметь два подчеркивания и называться как "self.__do_something()".

Другие вопросы по тегам