Es gibt ein paar Ansätze, die Sie dafür nehmen könnte. Wie andere bereits erwähnt haben, könnten Sie einfach Funktionen auf Modulebene verwenden. In diesem Fall ist das Modul selbst der Namespace, der sie zusammenhält. Eine weitere Option, die nützlich sein kann, wenn Sie den Zustand verfolgen müssen, besteht darin, eine Klasse mit normalen Methoden (self) zu definieren und dann eine einzelne globale Instanz davon zu definieren und ihre Instanzmethoden in den Modulnamensraum zu kopieren. Dies ist der Ansatz, den das "zufällige" Standard-Bibliotheksmodul anwendet - werfen Sie einen Blick auf lib/python2.5/random.py
in Ihrem Python-Verzeichnis. Am unteren Ende hat es so etwas wie diese:
# Create one instance, seeded from current time, and export its methods
# as module-level functions. [...]
_inst = Random()
seed = _inst.seed
random = _inst.random
uniform = _inst.uniform
...
Oder Sie den grundlegenden Ansatz können Sie beschrieben (obwohl ich würde mit @staticmethod
anstatt @classmethod
in den meisten Fällen empfehlen).
Die meisten Ihrer Antwort, große Ausnahmen sind der zweite und der letzte Satz, ist nur diskutierbar (und ich stimme eher nicht zu) und neben dem Punkt. Ich würde sagen, dass wir den ganzen Fluff, wie gut der Unterricht ist, verbessern würden, was denkst du? – delnan
Ich stimme dieser Antwort gleichzeitig zu und stimme ihr nicht zu. Ich kann also nicht entscheiden, ob ich den Knopf hoch oder runter drücke. Jedenfalls bin ich damit einverstanden, dass die Objekte den Code leichter lesbar und pfleglich machen. Ich bin anderer Meinung über die Verwendung des Singleton/Borg-Musters http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html. Es ist nicht so, dass es ein schlechtes Muster ist; Die Verwendung statischer Methoden mit Klassenvariablen ist jedoch wesentlich einfacher zu verwalten und liest ein extrem kompliziertes Codeprojekt ein. Ja, das mag technisch nicht korrekt sein, aber Junior-Programmierer werden es Ihnen danken. –