2013-08-22 30 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' –