в python что происходит, когда экземпляр класса вызывает @classmethod

поэтому у меня есть модель класса, а внутри модели у меня есть метод сохранения

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')

вот код для getValueOrDefault, они в одном классе

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

если я добавляю метод класса для сохранения и вызываю сохранение из экземпляра, я получаю сообщение об ошибке, говорящее, что getValueOrDefault требует дополнительного позиционного аргумента «ключ». Я предполагаю, что когда я вызываю его из экземпляра, self (который становится cls) является самим классом, а не созданным экземпляром, и я пытаюсь сделать Model.getValueOrDefault, но не должен ли он дать мне какую-то ошибку, которая говорит мне, что я могу не вызывать функцию без инициализации класса?


person demalegabi    schedule 11.05.2016    source источник


Ответы (1)


Я предполагаю, что когда я вызываю его из экземпляра, сам (который становится cls) является самим классом, а не созданным экземпляром

Ага.

и я пытаюсь сделать Model.getValueOrDefault, но разве это не должно выдавать мне какую-то ошибку, которая говорит мне, что я не могу вызвать функцию без инициализации класса?

Неа. Вполне допустимо вызывать Model.getValueOrDefault, но при этом вы должны явно передать self.

person user2357112 supports Monica    schedule 11.05.2016