2016-05-11 18 views
0

so eine Klasse Modell ich habe und im Inneren Modell habe ich eine Methode speichernin Python, was, wenn eine Instanz einer Klasse geschieht eine @classmethod nennt

def save(self): 
    args = list(map(self.getValueOrDefault,self.__fields__)) 
    args.append(self.getValueOrDefault(self.__primary_key__)) 
    logging.debug('saving %s' % str(args)) 
    row = yield from execute(self.__insert__,args) 
    if row != 1: 
     logging.debug('failed to insert record: affected rows: %s' % row) 
    else: 
     logging.info('insertion was succesful') 

hier ist der Code für getValueOrDefault, sie im gleichen sind

Klasse
def getValueOrDefault(self,key): 
    value = getattr(self,key) 
    if value is None: 
     field = self.__mapping__[key] 
     if field.default is not None: 
      value = field.default() if callable(field.default) else field.default 
      logging.info('using default value for %s ==> %s' % (key,value)) 
      setattr(self,key,value) 
    return value 

wenn ich hinzufügen Class von einer Instanz speichern zu speichern und nenne ich einen Fehler sagen getValueOrDefault zusätzliche Positions Argument ‚Schlüssel‘ erfordert. Meine Vermutung ist, wenn ich es von einer Instanz aus anrufe, ist das Selbst (das zu einem cls wird) die Klasse selbst, nicht die erzeugte Instanz und ich versuche Model.getValueOrDefault zu machen, aber sollte es mir nicht einen Fehler geben, der mir sagt, dass ich es kann Funktion nicht aufrufen, ohne die Klasse zu initialisieren?

Antwort

1

Meine Vermutung ist, wenn ich es von einer Instanz des Selbst nennen (die eine cls wird) ist die Klasse selbst nicht die Instanz erstellt

Yup.

und ich versuche Model.getValueOrDefault zu tun, aber es sollte mich nicht einige Fehler geben, die mir sagt, ich kann nicht eine Funktion aufrufen, ohne die Klasse zu initialisieren?

Nein. Es ist durchaus zulässig, anzurufen, aber Sie müssen self explizit übergeben, wenn Sie das tun.