python的classmethod什么时候使用?

在scrapy的文档中有这么一段代码:

import pymongo

class MongoPipeline(object):

    collection_name = 'scrapy_items'

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.collection_name].insert_one(dict(item))
        return item

里面有个@classmethod,百度了一下,说:

Python中有3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式.

百度到的内容讲了一下怎么调用,可是没有说什么时候使用哪种方式,所以问题就是这三种方式分别的使用场景是什么?

阅读 6.4k
2 个回答

类方法可以通过类或者实例对象调用。一般情况下是作用于类相关的操作。第一个参数必须是类对象。
静态方法其实就是一个普通的函数,只不过它实现的功能与类比较相关所以放到了类里面。
普通方法,其实就是需要操作一些实例独有的属性,是实例而不是类。第一个参数一般是隐式地将实例传递给self参数。
其实 cls , self 这些名字都是不是强制命名的,约定俗成而已。
想了解的更清楚,就进一步baidu下吧~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题