Это плохая практика использовать имя встроенной функции в качестве идентификатора атрибута или метода? - PullRequest
39 голосов
/ 02 февраля 2012

Я знаю, что никогда не используйте имена встроенных функций в качестве идентификаторов переменных.

Но есть ли причины не использовать их в качестве идентификаторов атрибутов или методов?

Например, безопасно ли писать my_object.id = 5 или определять метод экземпляра dict в моем собственномкласс

Ответы [ 3 ]

35 голосов
/ 02 февраля 2012

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

Еще один неприятный эффект заключается в том, что встроенные теневые функции путают подсветку синтаксиса в большинстве редакторов, поддерживающих python (vi, emacs, pydev, idle и т. Д.). Также,некоторые инструменты из ворса предупреждают об этой практике.

16 голосов
/ 02 февраля 2012

Да, это плохая практика. Это может не помешать вам сразу, но все же ухудшает читабельность кода.

Для выборочной цитаты из PEP20:

Красиво лучше, чем безобразно.
Простое лучше, чем сложное.
Читаемость имеет значение.
Если реализацию сложно объяснить, это плохая идея.

Видя вызов myobject.dict(), было бы естественно предположить, что он вернет myobject.__dict__ или что myobject.id() вернет то же, что и id(myobject)

Они могут узнать, что они не правы; но это потребует времени и усилий и, вероятно, приведет к некоторым ошибкам, пока они это поймут. Вызов вашего атрибута myobject.object_id_number намного дольше, но проясняет, что он отличается от id(myobject)

13 голосов
/ 02 февраля 2012

Нет, все в порядке.Поскольку ссылка на объект обязательна, встроить ее в тень невозможно.

...