Pythonic: кодовое имя конфликтует со встроенным - PullRequest
4 голосов
/ 22 февраля 2012

В настоящее время я создаю код с именем «SET».Название кода является аббревиатурой, которая была определена по многим причинам (не относящимся к программированию) и поэтому не может быть изменена.

Проблема: Самый простой и, как мне кажется, менее болезненный способконечный пользователь, использующий мой код, будет называть пакет «set».Но, конечно, это проблема, поскольку она конфликтует со встроенной функцией set .

Вопрос: Каковы возможные решения?Некоторые могут быть (есть, вероятно, больше):

  1. изменить имя пакета (например, setb).

    import setb
    

    Я бы действительно предпочел не делать этого, потому что тогда оно будет отличаться от реального имени

  2. сделать имя пакета заглавным (SET)

    import SET
    

    Это было бы прямолинейное решение, но я задаюсь вопросом: это правильное наименование пакета для питона?Кроме того, я нахожу это немного болезненным, поскольку все модули, определенные в коде, будут иметь что-то вроде «import SET.xy ..» (то есть заглавные буквы, написанные много раз).Но это не имеет большого значения, если это питонский путь.

  3. оставьте название "set"

    import set
    

    Ну, это явно не хорошо.Но это будет проблемой, только если пользователь использует «набор импорта», не так ли?Этого не должно происходить в «нормальных условиях использования», так как код предоставит некоторые сценарии для его использования, лучше использовать его в качестве стандартного модуля Python.Но мы никогда не узнаем, и это может быть импортировано, как это, и могут быть даже некоторые проблемы, которые я не вижу (со встроенным набором).

Я рассматриваюрешение 2., но я действительно не уверен.Может быть, это не правильно, или, может быть, у вас, ребята, есть лучшее решение.

PS: Я нашел несколько похожих тем в сети и по stackoverflow, но обычно он имеет дело с именами внутри скрипта или модуля внутрипакет.Проблема здесь действительно связана с именем кода (которое имеет смысл только при таком написании) и, следовательно, связана с правильным именованием имени пакета.


EDIT

Выбранное решение: Я решил использовать «SET» в качестве имени пакета.Хотя здесь было предложено много хороших предложений: pyset, semt, setool ... или более явный "starexoplanettool" (объясняя акроним).Спасибо вам всем.

EDIT # 2

Мне нравится "забавное" решение, состоящее из пакета с именем S и подпакета E ... чтобы получить наконец:

    import S.E.T

Спасибо, Дон. Вопрос.

Ответы [ 4 ]

6 голосов
/ 22 февраля 2012

Почему бы не прописать значение, стоящее за аббревиатурой, и если пользователь отчаянно нуждается в более коротком имени, он может сделать import someetymologyterm as SET или что угодно. Python дает им выбор, так что это не конец света в любом случае.

5 голосов
/ 22 февраля 2012

Это правильное именование пакета?

В этих условиях это не имеет значения.

Верхний регистр в начале встречается редко (ConfigParser, HTMLParser).Случай с верблюдом встречается редко (cStringIO).Но это не делает все заглавные буквы неправильными.

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

"set" - это английское слово с наибольшим количеством определений.Это единственный возможный выбор аббревиатуры.

Дело не в том, чтобы соответствовать «стандарту» сообщества более или менее приемлемого поведения.

Дело в том, чтобы написать что-то, что работает.

(т. е. заглавными буквами, написанными много раз).

Вряд ли это проблема.Люди на самом деле запускают программное обеспечение чаще, чем пишут.

Люди читают и настраивают чаще, чем пишут.

Если вы беспокоитесь о неправильном написании, есть копирование и вставка.

Кроме того, даже дешевая IDE, такая как Komodo Edit, может выяснить, как завершить код установленного модуля с длинным именем.

3 голосов
/ 22 февраля 2012

Если вам придётся выбрать такое неудачное имя, вы можете сделать боль в заднице иронической анафемой!Просто создайте основной пакет "S" с подпакетом "E" и в нем подпакет "T".Тогда вы можете сделать:

import S.E.T 

или

from s.e.t import xyz

или

import s.e.t as set_

, вы даже можете сделать vodoo в файле __init__.py основного-pacakge; -)

Только мои 2 цента!

0 голосов
/ 23 февраля 2012

Может быть, я не понимаю, но это выглядит просто как проблема с пространством имен.

Вот один выход. Предварительный путь к set.py на sys.path до импорта. Вы можете заключить это в функцию, которая отменяет изменения после импорта.

Я в поезде, поэтому не могу это проверить, но я бы попробовал.

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