为什么Django需要引入装饰器classonlymethod
?
为什么它不能重用python classmethod
?
最佳答案
最好的解释是the source code本身:
class classonlymethod(classmethod):
def __get__(self, instance, cls=None):
if instance is not None:
raise AttributeError("This method is available only on the class, not on instances.")
return super().__get__(instance, cls)
区别在于可以在实例上调用 classmethod
,其效果与在类上调用的效果相同,但是classonlymethod
仅可以在类上调用。