Конвенции за именуване на Python за модули

Имам модул, чиято цел е да дефинира клас, наречен "nib". (и също няколко свързани класа.) Как трябва да извикам самия модул? "писец"? "nibmodule"? Нещо друго?


person Ram Rachum    schedule 02.04.2009    source източник


Отговори (5)


Просто набийте. Наименувайте класа Nib с главно N. За повече относно конвенциите за именуване и други стилови съвети вижте PEP 8, стиловото ръководство на Python.

person Stephan202    schedule 02.04.2009
comment
Повечето Python проекти следват ли тази конвенция? Тъй като забелязвам, че вградените класове са с малки букви, напр. списък, низ и т.н. - person Ram Rachum; 03.04.2009
comment
Вашето наблюдение w.r.t. вградените типове са правилни. Това обаче определено са изключения. Повечето други класове, дефинирани в стандартната библиотека са с главни букви. - person Stephan202; 03.04.2009
comment
Мислех, че това е правилната конвенция, но има присъщ проблем с нея, поне на мен така ми се струва. Да кажем, че имам клас, наречен Client, и разбираемо често правя негови екземпляри, които искам да извикам client. Но според вашата конвенция името на модула ще бъде client и така винаги ще трябва да назовавам своите екземпляри нещо неестествено като client_instance. Какво мислите за този проблем? - person Ray; 01.06.2016
comment
@Ray Но да речем, че конвенцията трябваше да наименува модула Client, тогава той ще се сблъска с името на класа Client. Тъй като има само 3 възможни варианта на именуване (client, Client или CLIENT), винаги ще има сблъсък между два екземпляра, класове, модули или константи. Вярвам, че има по-малко пъти, когато наименувате вашия модул по същия начин като екземпляр или константа, отколкото класа, и следователно това е по-добрата конвенция за именуване от другите възможности. Освен това ще направи импортирането от модули по-четливо, тъй като обикновено импортирате класове и константи, а не променливи. - person Ted Klein Bergman; 08.11.2016
comment
Причината, поради която вградените са с малки букви, е да се намекне, че те са внедрени в C, а не в python. - person Har; 21.04.2017
comment
@Har PEP 8: Конвенцията за именуване на функции може да се използва вместо това в случаите, когато интерфейсът е документиран и се използва предимно като извикваем. - person Alan; 20.01.2019

Бих го нарекъл nib.py. И аз също бих нарекъл класа Nib.

В по-голям проект на Python, върху който работя, имаме много модули, дефиниращи основно един важен клас. Имената на класовете започват с главна буква. Имената на модулите са като класа с малки букви. Това води до импортиране като следното:

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs

Това е малко като емулиране на начина на Java. Един клас на файл. Но с добавената гъвкавост винаги можете да добавите друг клас към един файл, ако има смисъл.

person rincewind    schedule 02.04.2009

Знам, че моето решение не е много популярно от гледна точка на Pythonic, но предпочитам да използвам подхода на Java на един модул->един клас, като модулът е наречен като клас. Разбирам причината зад стила на Python, но не обичам да имам много голям файл, съдържащ много класове. Трудно ми е да разглеждам, въпреки сгъването.

Друга причина е контролът на версиите: наличието на голям файл означава, че вашите ангажименти са склонни да се концентрират върху този файл. Това потенциално може да доведе до по-голямо количество конфликти за разрешаване. Вие също така губите допълнителната информация в журнала, че вашият комит променя конкретни файлове (следователно включващи специфични класове). Вместо това виждате модификация на файла на модула, само с коментара за ангажиране, за да разберете каква модификация е направена.

Обобщавайки, ако предпочитате философията на Python, отидете за предложенията от другите публикации. Ако вместо това предпочитате java-подобната философия, създайте Nib.py, съдържащ клас Nib.

person Stefano Borini    schedule 02.04.2009
comment
Споменатите проблеми са причинени от ограничения в редактора и в използването на инструменти за контрол на версиите, а не от езика или стила на програмиране. Един клас на файл е вреден за структурата на кода. Използвайте spyder или подобен редактор, за да видите резюме на вашите класове, за да подпомогнете навигацията, и два панела с един и същи файл, отворени и в двата. Също така, моля, прочетете PEP8. Python е за писане на Python и Java за Java, но Python не е за писане на Java. - person Ioannis Filippidis; 08.04.2015
comment
@IoannisFilippidis: Ако трябваше да поставя всички класове за модул в един файл с размерите на кода, които обикновено управлявам, дори нямаше да мога да отворя файла, сблъсъците с други колеги щяха да скочат до небето и шефът ми щеше да плюе в моя лице (образно казано, това е), че го е предложил. Подходът с един файл не се мащабира, PEP-8 или не. - person Stefano Borini; 11.04.2015
comment
@StefanoBorini: PEP8 не изисква подход с един файл. Един клас на модул и един файл на (кодова единица) са две крайности от много широк спектър. Ако виждате неуправляемо големи размери на файлове с един файл на модул, може би трябва да помислите за преразглеждане на вашия подход за разделяне на пакет на модули. - person Chintalagiri Shashank; 27.09.2015

писецът е добре. Ако се съмнявате, вижте ръководството за стил на Python.

От PEP 8:

Имена на пакети и модули Модулите трябва да имат кратки имена с малки букви. Долни черти могат да се използват в името на модула, ако това подобрява четливостта. Пакетите на Python също трябва да имат кратки имена с малки букви, въпреки че използването на долни черти не се препоръчва.

Тъй като имената на модулите са съпоставени с имената на файловете и някои файлови системи са нечувствителни към главни и малки букви и съкращават дългите имена, важно е имената на модулите да бъдат избрани да бъдат сравнително кратки -- това няма да е проблем в Unix, но може да е проблем, когато кодът се транспортира към по-стари версии на Mac или Windows или DOS.

Когато модул за разширение, написан на C или C++, има придружаващ Python модул, който осигурява интерфейс от по-високо ниво (напр. по-обектно ориентиран), модулът C/C++ има водеща долна черта (напр. _socket).

person thedz    schedule 02.04.2009

От PEP-8: Имена на пакети и модули:

Модулите трябва да имат кратки имена с малки букви. Долни черти могат да се използват в името на модула, ако това подобрява четливостта.

Пакетите на Python също трябва да имат кратки имена с малки букви, въпреки че използването на долни черти не се препоръчва.

Когато модул за разширение, написан на C или C++, има придружаващ Python модул, който осигурява интерфейс от по-високо ниво (напр. по-обектно ориентиран), модулът C/C++ има водеща долна черта (напр. _socket).

person Ehsan    schedule 13.08.2019