2016-11-07 3 views
0

Ich musste einen Singleton für meinen Code erstellen. Also folgte ich these instructions, method 3. HierSingleton, Metaklasse und Fehler bei der Instanziierung

ist der Code, den ich habe:

class Singleton(type): 
    _instances = {} 
    def __call__(cls, *args, **kwargs): 
     if cls not in cls._instances: 
      cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) 
     return cls._instances[cls] 

def MyCfg(object): 
    __metaclass__ = Singleton 
    def __init__(self, p1 = 1, p2 = 2): 
     # Some code 

my_cfg = MyCfg() 

jedoch whenI diesen Code ausführen, erhalte ich eine folgende Fehlermeldung:

TypeError: MyCfg() takes exactly 1 argument (0 given) 

Ich bin nicht neu in python und Programmierung, aber ich nie arbeitete mit python auf dieser Ebene. Ich habe versucht zu verstehen, was genau passiert in Singleton Klasse, aber ich kann nicht herausfinden.

Würde jemand erklären können, warum dieser Code einen Fehler erzeugt?

+0

@shaktimaan Es hat nicht funktioniert. Immer noch der gleiche Fehler. – flashburn

+1

'MyCfg' ist eine Funktion, keine Klasse. Ändern Sie das 'def' in' class'. – Dunes

Antwort

2

Sie haben:

def MyCfg(object) 

Ich bin ziemlich sicher, dass Sie nach:

Der Fehler, den Sie sehen (TypeError: MyCfg() takes exactly 1 argument (0 given)) ist, weil mit dem aktuellen Code, den Sie definieren eine Funktion genannt MyCfg, die ein einzelnes Argument (das Sie nicht zur Verfügung stellen).

+0

Ja, genau das ist es. Ich habe das gerade herausgefunden. – flashburn

Verwandte Themen