Неправильно ли использовать встроенное имя функции в качестве атрибута или идентификатора метода?
Я знаю, что никогда не использовать встроенные имена функций в качестве переменных идентификаторов.
Но есть ли причины не использовать их в качестве атрибутов или идентификаторов методов?
Например, безопасно ли писать my_object.id = 5
или определять метод экземпляра dict
в моем собственном классе?
Ответы
Ответ 1
Это не смутит интерпретатора, но может смутить людей, читающих ваш код. Следует избегать ненужного использования встроенных имен для атрибутов и методов.
Еще один плохой эффект заключается в том, что встроенные встроенные шаблоны смущают синтаксические выделения в большинстве редакторов, ориентированных на python (vi, emacs, pydev, idle и т.д.). Также некоторые инструменты lint будут предупреждать об этой практике.
Ответ 2
Да, это плохая практика. Это может не сразу нарушить что-либо для вас, но оно все еще ухудшает читаемость кода.
Для выборочной цитаты из PEP20:
Красивая лучше, чем уродливая.
Простой лучше, чем сложный.
Показатели удобочитаемости.
Если внедрение трудно объяснить, это плохая идея.
Увидев вызов myobject.dict()
, было бы естественно предположить, что он вернется myobject.__dict__
или что myobject.id()
возвращает то же самое, что и id(myobject)
Возможно, они узнают, что они ошибаются; но это потребует времени и усилий и, вероятно, приведет к некоторым ошибкам, пока они это выяснят. Вызов вашего атрибута myobject.object_id_number
намного длиннее, но дает более четкое представление о том, что он отличается от id(myobject)
Ответ 3
Нет, это хорошо. Поскольку требуется ссылка на объект, нет способа заставить их теневое встроенное.