Mam moduł, którego celem jest zdefiniowanie klasy o nazwie „nib”. (i kilka klas pokrewnych). Jak powinienem wywołać sam moduł? "stalówka"? „nibmodule”? Coś jeszcze?
python
naming-conventions
Ram Rachum
źródło
źródło
Client
i, co zrozumiałe, często robię jej przykłady, do których chcę zadzwonićclient
. Ale zgodnie z twoją konwencją nazwa modułu byłabyclient
, więc zawsze musiałbym nazywać moje instancje czymś nienaturalnymclient_instance
. Co myślisz o tym problemie?Client
, wtedy będzie to kolidować z nazwą klasyClient
. Ponieważ istnieją tylko 3 możliwe warianty nazewnictwa (client
,Client
lubCLIENT
) zawsze będzie zderzenie dwóch przypadków, klas, modułów lub stałych. Wydaje mi się, że mniej razy można nazwać swój moduł tak samo jak instancja lub stała niż klasa i dlatego jest to lepsza konwencja nazewnictwa innych możliwości. Dzięki temu importowanie z modułów będzie bardziej czytelne, ponieważ generalnie importujesz klasy i stałe, a nie zmienne.Nazwałbym to nib.py. I nazwałbym również stalówkę klasy.
W większym projekcie w Pythonie, nad którym pracuję, mamy wiele modułów definiujących w zasadzie jedną ważną klasę. Nazwy klas rozpoczynają się od dużej litery. Nazwy modułów są nazywane małymi literami jak klasy. Prowadzi to do importu, jak poniżej:
To trochę jak emulacja języka Java. Jedna klasa na plik. Ale z dodatkową elastycznością, zawsze możesz dodać kolejną klasę do pojedynczego pliku, jeśli ma to sens.
źródło
Wiem, że moje rozwiązanie nie jest zbyt popularne z pythonowego punktu widzenia, ale wolę stosować podejście Java, w którym jeden moduł -> jedna klasa, z modułem nazwanym jako klasa. Rozumiem powód stylu Pythona, ale nie przepadam za bardzo dużym plikiem zawierającym wiele klas. Trudno mi się przeglądać pomimo składania.
Innym powodem jest kontrola wersji: posiadanie dużego pliku oznacza, że Twoje zmiany mają tendencję do koncentrowania się na tym pliku. Może to potencjalnie prowadzić do większej liczby konfliktów do rozwiązania. Tracisz również dodatkowe informacje dziennika, że twoje zatwierdzenie modyfikuje określone pliki (a zatem obejmuje określone klasy). Zamiast tego zobaczysz modyfikację pliku modułu, z tylko komentarzem do zatwierdzenia, aby zrozumieć, jaka modyfikacja została dokonana.
Podsumowując, jeśli wolisz filozofię Pythona, przejrzyj sugestie innych postów. Jeśli zamiast tego wolisz filozofię podobną do Java, utwórz plik Nib.py zawierający klasę Nib.
źródło
spyder
lub podobnego edytora, aby zobaczyć podsumowanie swoich klas, ułatwiające nawigację i dwa okienka z tym samym plikiem otwartym w obu. Przeczytaj również PEP8. Python jest przeznaczony do pisania w Pythonie, a Java w Javie, ale Python nie służy do pisania w Javie.stalówka jest w porządku. W razie wątpliwości zapoznaj się z przewodnikiem po stylu języka Python.
Od PEP 8 :
źródło
Od PEP-8: nazwy pakietów i modułów :
źródło
Moduł foo w Pythonie byłby odpowiednikiem pliku klasy Foo w Javie
lub
Moduł foobar w Pythonie byłby odpowiednikiem pliku klasy FooBar w Javie
źródło