2 Stimmen

Statisch oder konstant oder was sind sie?

Ich möchte nur wissen, wie ich bestimmte Klassen im Entwurfsmuster hier aufrufen kann, wie welche Art sie im OO-Entwurf klassifiziert sind

(1) Ich verwende eine Klasse, die nur benannte Konstanten hat, diese Klasse wird direkt von anderen Klassen verwendet, um Werte von Konstanten in ihr zu erhalten.

(2) Ich verwende eine Klasse mit vielen statischen Methoden. Diese Klasse wird im Grunde von anderen Klassen als Halter von Methoden verwendet, die von ihnen genutzt werden. Auch hier instanziere ich die Klasse nicht.

Was sind das für Klassen, die unter OOdesign klassifiziert werden? Kann ich es auf eine elegantere Weise tun?

8voto

Manoj Govindan Punkte 68109

Was sind das für Klassen, die unter OOdesign fallen? Kann ich es auf eine elegantere Weise tun?

Sie haben bessere Alternativen, IMHO.

Ich verwende eine Klasse, die nur benannte Konstanten hat, diese Klasse wird direkt andere Klassen verwendet, um Werte von Konstanten in it.I dont instanziieren die Klasse zu erhalten.

In diesem Fall brauchen Sie z.B. nicht unbedingt eine Klasse. Sie können ein Einstellungsmodul haben, das die verschiedenen "Konstanten" definiert. Ich setze Konstanten in Anführungszeichen, weil es in Python keine Konstanten gibt, wie es sie beispielsweise in Java gibt.

(2) Ich verwende eine Klasse mit vielen statischen Methoden. Diese Klasse wird im Grunde von anderen Klassen als Halter von Methoden verwendet, die von ihnen genutzt werden. Auch hier instanziere ich die Klasse nicht.

Auch hier besteht keine Notwendigkeit für einen Kurs. Sie können ein oder mehrere Module haben, die diese Methoden oder besser gesagt, Funktionen enthalten. Sie können logisch gruppiert werden, wie Sie es für richtig halten.

Ich möchte noch anmerken, dass Sie sich nicht an den (im Java-Stil?) "Class only"-Ansatz halten müssen (in Ermangelung eines besseren Ausdrucks). Versuchen Sie lieber, Code zu schreiben, der nicht gegen den Strich der Sprache geht. Im Fall von Python würde ich argumentieren, dass solche Klassen, wie Sie sie oben beschrieben haben, am besten vermieden werden. Sie scheinen mir ein Überbleibsel aus Java zu sein.

1voto

Daniel Stutzbach Punkte 69710
  1. Viele (aber nicht alle) Sprachen, die sich stark auf OOP konzentrieren (C++, C#, Java), haben eine enum Typ für Konstanten zu verwenden, anstatt sie in eine Klasse aufzunehmen. In anderen Sprachen, wie Smalltalk und Python, gibt es jedoch kein spezielles Konstrukt für Konstanten, und es kann sinnvoll sein, sie in einer Klasse unterzubringen. Soweit ich weiß, gibt es keinen speziellen Namen für diese Art von Klasse.

  2. In anderen Sprachen ist eine statische Klasse eine Klasse, die nicht instanziiert werden kann und die nur Konstanten und statische Methoden definiert. Auch wenn Python auf Sprachebene keine Unterstützung für die Durchsetzung dieser Regeln bietet, würde ich eine Klasse, die auf diese Weise entworfen wurde, dennoch als statische Klasse bezeichnen.

In Python 2.6 oder höher können Sie einen Klassendekorator verwenden, um die Regeln durchzusetzen:

def staticclass(cls):
    """Decorator to ensure that there are no unbound methods and no instances are
       created"""
    for name in cls.__dict__.keys():
        ob = getattr(cls, name)
        if isinstance(ob, types.MethodType) and ob.im_self is None:
            raise RuntimeError, "unbound method in class declared no_instances"
    def illegal(self):
        raise RuntimeError,"Attempt to instantiate class declared no_instances"
    cls.__init__ = illegal
    return cls

@staticclass
class MyStaticClass(object):
    pass

Wie Manoj betont, kann man in vielen Fällen auf die Klasse verzichten und die Konstanten oder Funktionen auf der Modulebene unterbringen. Es gibt jedoch Fälle, in denen eine Klasse wirklich nützlich ist. Wenn die Klasse zum Beispiel einen bedeutenden Status hat, muss man, wenn man die Funktionen auf die Modulebene setzt, den Code mit global Erklärungen. Obwohl selten, ist es manchmal auch nützlich, eine Klassenhierarchie statischer Klassen zu haben.

Eine weitere Alternative zu einer statischen Klasse ist das Singleton-Muster, bei dem sichergestellt wird, dass nur eine Instanz der Klasse erstellt wird (und typischerweise eine statische Methode bereitgestellt wird, die diese Instanz zurückgibt).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X