Ich habe ein Modul, dessen Zweck es ist, eine Klasse namens "nib" zu definieren. (und einige verwandte Klassen auch.) Wie soll ich das Modul selbst aufrufen? "Feder"? "Nibmodul"? Noch etwas?
Ich habe ein Modul, dessen Zweck es ist, eine Klasse namens "nib" zu definieren. (und einige verwandte Klassen auch.) Wie soll ich das Modul selbst aufrufen? "Feder"? "Nibmodul"? Noch etwas?
Antworten:
Nur Feder. Benennen Sie die Klasse Nib mit einem Großbuchstaben N. Weitere Informationen zu Namenskonventionen und anderen Stilhinweisen finden Sie in PEP 8 , dem Python-Styleguide.
Client
, und verständlicherweise mache ich oft Instanzen davon, die ich anrufen möchte client
. Aber gemäß Ihrer Konvention wäre der Modulname client
, und so müsste ich meine Instanzen immer so unnatürlich benennen client_instance
. Was halten Sie von diesem Problem?
Client
würde das Modul benennen , dann würde es mit dem Klassennamen kollidieren Client
. Da es nur drei mögliche Namensgebung ist Varianten ( client
, Client
oder CLIENT
) immer ein Zusammenstoß zwischen zwei Instanzen, Klassen, Module oder Konstanten sein wird. Ich glaube, Sie benennen Ihr Modul seltener genauso wie eine Instanz oder Konstante als die Klasse und sind daher die bessere Namenskonvention für die anderen Möglichkeiten. Außerdem wird der Import aus Modulen besser lesbar, da Sie im Allgemeinen Klassen und Konstanten anstelle von Variablen importieren.
Ich würde es nib.py nennen. Und ich würde auch die Klasse Feder nennen.
In einem größeren Python-Projekt, an dem ich arbeite, haben wir viele Module, die im Grunde eine wichtige Klasse definieren. Klassen werden beginnend mit einem Großbuchstaben benannt. Die Module werden wie die Klasse in Kleinbuchstaben benannt. Dies führt zu Importen wie den folgenden:
from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs
Es ist ein bisschen wie das Emulieren des Java-Weges. Eine Klasse pro Datei. Mit der zusätzlichen Flexibilität können Sie einer einzelnen Datei immer eine weitere Klasse hinzufügen, wenn dies sinnvoll ist.
Ich weiß, dass meine Lösung aus pythonischer Sicht nicht sehr beliebt ist, aber ich bevorzuge den Java-Ansatz eines Moduls -> einer Klasse, wobei das Modul als Klasse bezeichnet wird. Ich verstehe den Grund für den Python-Stil, aber ich mag es nicht, eine sehr große Datei mit vielen Klassen zu haben. Ich finde es schwierig zu stöbern, trotz Falten.
Ein weiterer Grund ist die Versionskontrolle: Wenn Sie eine große Datei haben, konzentrieren sich Ihre Commits in der Regel auf diese Datei. Dies kann möglicherweise dazu führen, dass mehr Konflikte gelöst werden müssen. Sie verlieren auch die zusätzlichen Protokollinformationen, die durch Ihr Commit bestimmte Dateien ändern (daher bestimmte Klassen betreffen). Stattdessen wird eine Änderung an der Moduldatei angezeigt, wobei nur der Commit-Kommentar angezeigt wird, um zu verstehen, welche Änderung vorgenommen wurde.
Wenn Sie die Python-Philosophie bevorzugen, lesen Sie zusammenfassend die Vorschläge der anderen Beiträge. Wenn Sie stattdessen die Java-ähnliche Philosophie bevorzugen, erstellen Sie eine Nib.py mit der Klasse Nib.
spyder
oder einen ähnlichen Editor, um eine Zusammenfassung Ihrer Klassen anzuzeigen, um die Navigation zu erleichtern, und zwei Fenster mit derselben Datei, die auf beiden geöffnet sind. Bitte lesen Sie auch PEP8. Python dient zum Schreiben von Python und Java für Java, Python jedoch nicht zum Schreiben von Java.
Feder ist in Ordnung. Im Zweifelsfall lesen Sie den Python-Styleguide.
Aus PEP 8 :
Paket- und Modulnamen Module sollten kurze Namen in Kleinbuchstaben haben. Unterstriche können im Modulnamen verwendet werden, wenn dies die Lesbarkeit verbessert. Python-Pakete sollten auch kurze Namen in Kleinbuchstaben enthalten, obwohl von der Verwendung von Unterstrichen abgeraten wird.
Da Modulnamen Dateinamen zugeordnet werden und bei einigen Dateisystemen die Groß- und Kleinschreibung nicht berücksichtigt wird und lange Namen abgeschnitten werden, ist es wichtig, dass die Modulnamen relativ kurz gewählt werden - dies ist unter Unix kein Problem, kann aber ein Problem sein Problem, wenn der Code zu älteren Mac- oder Windows-Versionen oder DOS transportiert wird.
Wenn ein in C oder C ++ geschriebenes Erweiterungsmodul über ein zugehöriges Python-Modul verfügt, das eine übergeordnete (z. B. objektorientiertere) Schnittstelle bietet, hat das C / C ++ - Modul einen führenden Unterstrich (z. B. _socket).
Aus PEP-8: Paket- und Modulnamen :
Module sollten kurze Namen in Kleinbuchstaben haben. Unterstriche können im Modulnamen verwendet werden, wenn dies die Lesbarkeit verbessert.
Python-Pakete sollten auch kurze Namen in Kleinbuchstaben enthalten, obwohl von der Verwendung von Unterstrichen abgeraten wird.
Wenn ein in C oder C ++ geschriebenes Erweiterungsmodul über ein zugehöriges Python-Modul verfügt, das eine übergeordnete (z. B. objektorientiertere) Schnittstelle bietet, hat das C / C ++ - Modul einen führenden Unterstrich (z. B. _socket).
Das foo- Modul in Python entspricht einer Foo- Klassendatei in Java
oder
Das foobar- Modul in Python entspricht einer FooBar- Klassendatei in Java