@static / @class method
Overview
首先回顾一下Python OOP常见的三种方法:
instance method 实例/接口方法
class method 类方法
static method 静态方法
class MyClass:
def method(self):
return 'instance method called', self
@classmethod
def classmethod(cls):
return 'class method called', cls
@staticmethod
def staticmethod():
return 'static method called'我们最常用的其实就是普通的接口方法,其他两个需要用类似装饰器的写法来标注。
类方法接受一个cls作为参数,它是指向MyClass本身的,并不是MyClass所创建的实例。
静态方法不接受self或者cls作为参数,所以不会修改类本身或者实例
@classmethod
看一下如何使用类方法,新建一个Pizza类,主要参数为原料ingredients
现在问题来了,既然是Pizza类,会有不同口味的Pizza,他们的配方都是固定的,那么如何便捷的生成不同口味的Pizza呢,答案就是classmethod
类方法可以根据需求事先预定义生成的实例,减少了代码量,这里我们根据margherita和prosciutto两种口味pizza的原料提前准备好了,cls就是代表类本身,这样如果我们再生成一些实例时,会方便很多:
@staticmethod
这种情况下使用一个静态方法是一个好的选择,通过area这个普通的接口方法,可以调用circle_area来计算面积,封装性更好:
Last updated
Was this helpful?