光头大叔的 Flask 教程里,全文搜索的部分 def search(cls, expression, page, per_page) , cls 代表什么意思呀?不是太理解

2020-04-10 00:19:43 +08:00
 miniyao

github.com/miguelgrinberg/microblog/blob/master/app/models.py # line 19

全文搜索的类变量里,传的 cls 是什么意思?不是太理解:

class SearchableMixin(object):
    @classmethod
    def search(cls, expression, page, per_page):
        ids, total = query_index(cls.__tablename__, expression, page, per_page)
        if total == 0:
            return cls.query.filter_by(id=0), 0
        when = []
        for i in range(len(ids)):
            when.append((ids[i], i))
        return cls.query.filter(cls.id.in_(ids)).order_by(
            db.case(when, value=cls.id)), total
......

3468 次点击
所在节点    Flask
5 条回复
Trim21
2020-04-10 00:25:03 +08:00
这不是 flask 的内容,是 python 面向对象的内容

这个函数是一个 classmethod,cls 是调用这个方法的那个类,可能是 SearchableMixin,可能是某个继承了 SearchableMixin 的类
miniyao
2020-04-10 09:44:52 +08:00
@Trim21 cls 应该就是 Class 的缩写吧?表示把类当做变量,可以这样理解吗?

类方法里,定义变量,把类本身再传进去,不会造成死循环吗?
vivipure
2020-04-10 09:49:50 +08:00
我的理解就是 相当与 self
shawndev
2020-04-10 09:57:04 +08:00
实例方法第一个参数是 self,类方法第一个参数是当前的类( class )
wuyifar
2020-04-10 11:24:32 +08:00
就跟 self 是一样的,self 是当前的实力对象,cls 是当前的类对象

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX