2013-08-22 29 views
0

我想爲我的用戶類定義一個generate_username。 (Django的用戶)如何將classmethod添加到python類?

庫代碼將使用它..

def generate_username(self, user_class): 
    """ Generate a new username for a user 
    """ 
    m = getattr(user_class, 'generate_username', None) 
    if m: 
     return m() 

如何定義和功能generate_username添加到用戶類?
我應該增加一個classmethod對不對?

+0

有什麼問題你已經擁有? –

+0

上面的代碼是我不想觸摸的庫代碼。和user_class(這是django的User類)很難繼承。 getattr(user_class,'generate_username',None)看起來像user_class.generate_username,我想它正在尋找一個classmethod。所以我問如何動態添加classmethod? – eugene

回答

0

您可以像添加實例方法一樣添加類方法,但必須將classmethod修飾器應用於該方法。

class Test(object): 
    pass 

@classmethod 
def classfunc(cls, attr): 
    print(cls, attr) 

Test.cf = classfunc 

用法:

>>> Test.cf(33) 
<class '__main__.Test'> 33 
+0

你甚至可以使用'classmethod'作爲裝飾器,使其更加Pythonic:'@ classmethod' –