什么是类方法(class method)?
Python开发中,我们更多使用的是实例方法(instance methods):
class Item:
def __init__(self):
pass
如这里的__init__(self)
,需要self
作为第一个参数。
类方法(class methods)则有所不同:
class Item:
# 需要额外装饰器
@classmethod
# 需要参数cls
def find_by_name(cls, name):
return {'Name': name}
- 需要额外的装饰器 @classmethod
- 实例方法中的参数
self
需要替换成cls
self
代表实例化的对象本身,而cls
则代表未实例化的类,而不是某个特定的对象。
如何调用类方法
有两种调用类方法的方式:
-
通过类(class)
Item.find_by_name('Jinx')
Item
类被直接作为cls
参数传入。 -
通过对象(object)
item = Item() item.find_by_name('Jinx')
item
对象的类,即同样是Item
作为cls
参数传入。
RESTful API开发中类方法的应用
综上,类方法的优势之一就是不需要实例化即可调用,所以在一些特殊场合下就显得比较合适。
例如在Restful Api 开发中,如果我们遵循“资源 - 模型”关系的工程结构,很多不直接与API调用者交互的逻辑将被放入对应的模型类中。
如果想在资源类的CRUD操作中调用模型类下的函数,将模型类中的一些函数设为类方法,
既可以避免实例化模型类,又可以依然把这些函数有效组织在对应的类下。