Какой смысл в этом коде? - PullRequest
3 голосов
/ 12 июля 2009

Я пытался создать оболочку Python для расширения tk, поэтому я посмотрел на Tkinter.py, чтобы узнать, как это сделать.

Просматривая этот файл, я обнаружил, что часто встречается следующий шаблон: определяется внутренний метод (на что указывает имя «_» в имени метода), а затем определяется открытый метод, который является внутренним. метод.

Я хочу знать, какая выгода от этого.

Например, в коде для класса Misc:

def _register(self, func, subst=None, needcleanup=1):
    # doc string and implementations is removed since it's not relevant
register = _register

Спасибо.

Ответы [ 3 ]

8 голосов
/ 12 июля 2009

Иногда вы можете захотеть изменить поведение метода.Например, я мог бы сделать это (гипотетически в классе Misc):

def _another_register(self, func, subst=None, needcleanup=1):
    ...

def change_register(self):
    self.register = self._another_register

def restore_register(self):
    self.register = self._register

Это может быть довольно удобным способом изменить поведение определенных фрагментов кода без создания подклассов (но обычно это делать не рекомендуется.такого рода вещи, кроме как внутри самого класса).

2 голосов
/ 12 июля 2009

Из PEP8

Кроме того, следующие специальные формы с использованием ведущих или конечных знак подчеркивания (как правило, можно сочетать с любым Конвенция):

_single_leading_underscore: слабый индикатор «внутреннего использования». Например. "от M import * "не импортирует объекты чье имя начинается с подчеркивания.

1 голос
/ 12 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...