Bei einer Python-Klasse, die nur einmal instanziiert wird, gibt es nur ein Objekt der Klasse. Ich habe mich gefragt, in welchen Fällen es sinnvoll ist, eine einzelne Klasseninstanz zu erstellen, anstatt stattdessen direkt mit der Klasse zu arbeiten.
Es gibt eine ähnliche Frage , aber sie hat einen anderen Schwerpunkt:
- Es geht darum, globale Variablen und Funktionen in einer Klasse und zu gruppieren
- Es ist nicht Python-spezifisch. Letzteres bedeutet, dass die Tatsache, dass (in Python) Klassen ebenfalls Objekte sind, nicht berücksichtigt wird.
AKTUALISIEREN:
In Python kann ich sowohl mit Klassen als auch mit Objekten Folgendes tun:
class A(object):
pass
A.some_state_var = True
# Then later
A.some_state_var = False
my_a = A()
my_a.some_state_var = True
# Then later
my_a.some_state_var = False
Ich sehe also nicht, wie es bei der Wahl zwischen einer Klasse und einer Instanz dieser Klasse um den Status geht (in Python). Ich kann mit beiden einen Zustand aufrechterhalten.
Darüber hinaus besteht die Motivation zum Erstellen meiner Klasse / Klasseninstanz nicht darin, eine Singleton-Anforderung durchzusetzen.
Außerdem geht es nicht so sehr darum, einen neuen Typ zu erstellen.
Die Motivation besteht darin, verwandten Code und Daten zu gruppieren und eine Schnittstelle dazu zu haben. Aus diesem Grund habe ich es zunächst als Klasse in einem Klassendiagramm modelliert. Erst als es um die Implementierung ging, fragte ich mich, ob ich diese Klasse instanziieren sollte oder nicht.
quelle
Dies ist eines der Dinge, die einen Religionskrieg verursachen, wenn Sie sich zu sehr darauf einlassen.
Aber im Allgemeinen ist eine Praxis, die ich oft gesehen habe, dass Klassenmethoden sich nur mit dem Erstellen von Instanzen dieser Klasse befassen sollten.
Wenn Sie darüber nachdenken, was eine Klasse ist, was ihr Zweck / Verhalten ist, dann ist dies sinnvoll. Der Zweck einer Klasse besteht darin, Instanzen von Objekten zu erstellen, die auf sich selbst basieren . Es ist eine Blaupause, die auch das Gebäude bauen kann. Eine "Benutzer" -Klasse erstellt "Benutzer" -Objekte. Eine "Hund" -Klasse erstellt "Hund" -Objekte usw.
Wenn dies das Verhalten einer Klasse ist, ist es sinnvoll, dass Methoden, die Sie der Klasse "X" hinzufügen, sich mit dem Erstellen von "x" -Objekten befassen.
Selbst wenn Sie immer nur ein "x" -Objekt benötigen, sollten Sie es dennoch instanziieren.
Das Hinzufügen von Methoden zur X-Klasse, die nicht mit dem Erstellen von Instanzen von "x" -Objekten zusammenhängen, kann zu verwirrendem unerwartetem Code führen. Es gibt natürlich Unmengen von Beispielen in der realen Welt, in denen die Menschen dies sowieso getan haben, aber wie gesagt, dieser Weg führt zu einem Religionskrieg.
quelle