У меня есть модуль, целью которого является определение класса под названием "nib". (и несколько связанных классов тоже.) Как мне вызвать сам модуль? "нож"? "нибмодуль"? Что-нибудь еще?
Соглашения об именах модулей Python
Ответы (5)
Просто кончик. Назовите класс Nib с заглавной N. Дополнительные сведения о соглашениях об именах и других советах по стилю см. в разделе PEP 8, руководство по стилю Python.
Client
, и понятно, что я часто создаю его экземпляры, которые хочу назвать client
. Но согласно вашему соглашению, имя модуля будет client
, поэтому мне всегда приходилось называть свои экземпляры чем-то неестественным, например client_instance
. Что вы думаете об этой проблеме?
- person Ray; 01.06.2016
Client
, тогда он будет конфликтовать с именем класса Client
. Поскольку существует только 3 возможных варианта именования (client
, Client
или CLIENT
), всегда будет конфликт между двумя экземплярами, классами, модулями или константами. Я считаю, что вы реже называете свой модуль так же, как экземпляр или константу, чем класс, и, следовательно, это лучшее соглашение об именах других возможностей. Это также сделает импорт из модулей более читабельным, поскольку обычно вы импортируете классы и константы, а не переменные.
- person Ted Klein Bergman; 08.11.2016
Я бы назвал это nib.py. И еще я бы назвал класс Nib.
В более крупном проекте Python, над которым я работаю, у нас много модулей, определяющих в основном один важный класс. Имена классов начинаются с заглавной буквы. Модули называются как класс в нижнем регистре. Это приводит к следующему импорту:
from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs
Это немного похоже на эмуляцию Java. Один класс на файл. Но с дополнительной гибкостью вы всегда можете добавить еще один класс в один файл, если это имеет смысл.
Я знаю, что мое решение не очень популярно с точки зрения pythonic, но я предпочитаю использовать подход Java один модуль-> один класс с модулем, названным как класс. Я понимаю причину стиля Python, но мне не очень нравится иметь очень большой файл, содержащий множество классов. Мне трудно просматривать, несмотря на складывание.
Другая причина — контроль версий: наличие большого файла означает, что ваши коммиты, как правило, концентрируются на этом файле. Это потенциально может привести к большему количеству конфликтов, которые необходимо разрешить. Вы также теряете дополнительную информацию журнала о том, что ваша фиксация изменяет определенные файлы (следовательно, с участием определенных классов). Вместо этого вы видите модификацию файла модуля, только с комментарием фиксации, чтобы понять, какая модификация была сделана.
Подводя итог, если вы предпочитаете философию Python, воспользуйтесь предложениями других сообщений. Если вместо этого вы предпочитаете java-подобную философию, создайте Nib.py, содержащий класс Nib.
spyder
или аналогичный редактор, чтобы просмотреть сводку ваших классов, чтобы облегчить навигацию, и две панели с одним и тем же файлом, открытым на обеих. Также, пожалуйста, прочитайте PEP8. Python предназначен для написания Python, а Java — для Java, но Python не для написания Java.
- person Ioannis Filippidis; 08.04.2015
ниб в порядке. Если вы сомневаетесь, обратитесь к руководству по стилю Python.
Из PEP 8:
Имена пакетов и модулей Модули должны иметь короткие имена, состоящие только из строчных букв. В имени модуля можно использовать символы подчеркивания, если это улучшает читабельность. Пакеты Python также должны иметь короткие имена со строчными буквами, хотя использование символов подчеркивания не рекомендуется.
Поскольку имена модулей сопоставляются с именами файлов, а некоторые файловые системы нечувствительны к регистру и усекают длинные имена, важно, чтобы имена модулей были выбраны достаточно короткими — это не будет проблемой в Unix, но может быть проблемой. проблема, когда код переносится на более старые версии Mac или Windows или DOS.
Когда модуль расширения, написанный на C или C++, имеет сопровождающий модуль Python, который обеспечивает интерфейс более высокого уровня (например, более объектно-ориентированный), модуль C/C++ имеет начальное подчеркивание (например, _socket).
Из PEP-8: имена пакетов и модулей:
Модули должны иметь короткие имена со строчными буквами. В имени модуля можно использовать символы подчеркивания, если это улучшает читабельность.
Пакеты Python также должны иметь короткие имена, состоящие только из строчных букв, хотя использование символов подчеркивания не рекомендуется.
Когда модуль расширения, написанный на C или C++, имеет сопровождающий модуль Python, который предоставляет интерфейс более высокого уровня (например, более объектно-ориентированный), модуль C/C++ имеет начальное подчеркивание (например, _socket).