django classonlymethod和python classmethod有什么区别?

时间:2011-11-15 08:16:58

标签: python django

为什么Django需要引入装饰器classonlymethod? 为什么不能重用python classmethod

1 个答案:

答案 0 :(得分:42)

最好的解释可能是源代码本身:

class classonlymethod(classmethod):
    def __get__(self, instance, owner):
        if instance is not None:
            raise AttributeError("This method is available only on the view class.")
        return super(classonlymethod, self).__get__(instance, owner)

不同之处在于,可以在实例上调用classmethod,与在类上调用它具有相同的效果,但classonlymethod只能在类上调用。