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