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?
python
naming-conventions
Ram Rachum
quelle
quelle
Client
, und verständlicherweise mache ich oft Instanzen davon, die ich anrufen möchteclient
. Aber gemäß Ihrer Konvention wäre der Modulnameclient
, und so müsste ich meine Instanzen immer so unnatürlich benennenclient_instance
. Was halten Sie von diesem Problem?Client
würde das Modul benennen , dann würde es mit dem Klassennamen kollidierenClient
. Da es nur drei mögliche Namensgebung ist Varianten (client
,Client
oderCLIENT
) 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:
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.
quelle
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.
quelle
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 :
quelle
Aus PEP-8: Paket- und Modulnamen :
quelle
Das foo- Modul in Python entspricht einer Foo- Klassendatei in Java
oder
Das foobar- Modul in Python entspricht einer FooBar- Klassendatei in Java
quelle