Ich mache nicht VBA, aber in Python, Module sind von grundlegender Bedeutung. Wie du sagst, können die Namespaces als Namespaces angesehen werden, sie sind aber auch eigenständige Objekte. Sie sind jedoch keine Klassen, also können Sie nicht von ihnen erben (zumindest nicht direkt).
Ich finde, dass es eine gute Regel ist, ein Modul mit einem Domänenbereich zu halten. Die Regel, die ich verwende, um zu entscheiden, ob etwas eine Funktion auf Modulebene oder eine Klassenmethode ist, besteht darin, mich zu fragen, ob sie sinnvollerweise für Objekte verwendet werden kann, die die 'Schnittstelle' ihrer Argumente erfüllen. Wenn ja, dann entlasse ich es aus einer Klassenhierarchie und mache es zu einer Modulebene-Funktion. Wenn seine Nützlichkeit wirklich auf eine bestimmte Klassenhierarchie beschränkt ist, dann mache ich es zu einer Methode.
Wenn Sie es für alle Instanzen einer Klassenhierarchie arbeiten müssen und Sie es zu einer Funktion auf Modulebene machen, denken Sie daran, dass alle Unterklassen die angegebene Schnittstelle mit der gegebenen Semantik implementieren müssen. Dies ist einer der Nachteile, wenn man von den Methoden weggeht: Man kann nicht länger eine geringfügige Änderung vornehmen und super
aufrufen. Auf der anderen Seite, wenn Subklassen wahrscheinlich die Schnittstelle und ihre Semantik neu definieren, dann ist diese bestimmte Klassenhierarchie vielleicht keine sehr gute Abstraktion und sollte neu überdacht werden.
ja, es ist sehr cool in Python, dass ich weiß kann, wenn ein: Import a_handler anderes: Import b_handler aber in VB ich nicht tun kann es :(Sie Beispiel Modulebene Funktion Wissen, das nicht der Fall ist eine Singleton-Funktion (siehe andere Antworten)? – nikaan
@Nikita Ich weiß nicht, was du mit Singleton-Funktion meinst.Ein Singleton ist eine (selten gute) Art, über ein Modul nachzudenken, aber ich denke, dass du versuchst, OO-Konzepte zu erzwingen – aaronasterling