MoonKid hat geschrieben:Ich möchte verhindern, dass irgendjemand von Außen eine Instanz davon erzeugen kann.
Der einfachste Ansatz sieht sicher so aus.
Code: Alles auswählen
class Foobar(object):
def __new__(cls):
raise NotImplementedError('Don\'t instantiate this class')
Jetzt müsstest du noch ein wenig Code schreiben um dann aus einer Klassenmethode heraus doch wieder die Instanziierung zu ermöglichen. Code dieser Art kann aber natürlich auch jeder schreiben der die Klasse benutzt, so dass du nicht verhindern kannst, dass trotzdem ein Exemplar erzeugt wird.
Wenn es dir im Endeffekt nur darum geht ein Singleton zu haben, dann gibt es dafür eigentlich eine relativ einfache Lösung. Im Netz findest du durchaus Singleton-Implementierungen für Python oder mit dem Borg-Pattern die Python-Version davon. Ich finde das akademisch ganz nett, aber es versucht im Endeffekt Python das mit Gewalt aufzuzwingen, wofür Python nicht gebaut ist und was Python gar nicht haben will. Langer Rede kurzer Sinn: Pack die Daten einfach in ein Modul, das ist bereits ein Singleton. Punkt.