簡體   English   中英

在python中,當類的實例調用@classmethod時會發生什么

[英]in python what happens when an instance of a class calls a @classmethod

所以我有一個類Model和內部模型我有方法保存

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需要附加的位置參數'key'。 我的猜測是,當我從實例調用它時,自身(變成cls)是類本身而不是創建的實例,我正在嘗試執行Model.getValueOrDefault,但它不應該給我一些錯誤,告訴我可以在不初始化類的情況下調用函數?

我的猜測是,當我從實例調用它時,自身(變成cls)是類本身而不是創建的實例

對。

我正在嘗試做Model.getValueOrDefault,但它不應該給我一些錯誤,告訴我在不初始化類的情況下不能調用函數嗎?

不。 調用Model.getValueOrDefault是完全有效的,但是在執行此操作時必須顯式傳遞self

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM