Python: публичные методы, вызывающие свои «братские» приватные методы - PullRequest
2 голосов
/ 27 октября 2009

Я писал код на 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 ]

2 голосов
/ 27 октября 2009

Это нормально. Однако вызов метода «брата» неверен в вашем коде. Вы должны сделать это так:

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

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

0 голосов
/ 27 октября 2009

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

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

0 голосов
/ 27 октября 2009

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

0 голосов
/ 27 октября 2009

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

Подробнее см. python.org - классы

...