0
点赞
收藏
分享

微信扫一扫

Self是什么?

Sky飞羽 2022-05-01 阅读 75
python

        对于python学者来说,这个self肯定不陌生,每次使用都是像固定格式似的,知道是那么写,但是这个self到底是什么呢?首先了解一下概念和在python中的使用,再看它在odoo中的使用。

一、基本概念

  • 普通函数、类方法  

    python中的函数都知道,在面向对象中,我们将类中定义的函数称为方法

    类的方法与普通的函数只有一个特别的区别——类方法中必须有一个额外的第一个参数名称, 按照惯例它的名称是 self

    注意:按照惯例它叫self,说明这个self名称不是必须的,你可以定义成a或b或其它名字都可以,在python中self不是关键词,但是约定成俗,为了让广大程序猿都好理解,一般就定义为self。

  • 类、实例、对象

        以下定义了一个Myclass,类中定义了一个f()方法,创建了一个新的类实例并将该对象赋给局部变量 x,x 为空的对象。即创建实例是通过类名+()实现,对象=类(参数)。

        也可以给实例变量绑定属性,比如:为 x绑定 name 属性,i也是类的属性

二、Self在Python中的使用

        我们虽然可以像上面那样给类的实例对象绑定属性,但是不够方便。在python中,类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,并且该方法有参数,参数可以通过__init__() 传递到类的实例化操作上,我们可以通过传参数的这种形式绑定属性。

        __init__ 方法的第一个参数永远是 self ,表示创建的实例本身,因此,在 __init__ 方法的内部,就可以把各种属性绑定到 self。而且在类中函数的相互调用也是要加self的,比如上面例子中的sq()。

        self代表类的实例,而非类;self 就是 对象/实例 属性集合,没有属性这个self也存在。

        通俗的说,这个self就是其中一个房间(init)的一个钥匙,房间里面放了很多东西(变量)这个房间就是函数init。self可以改成任何的词。在其他函数中有self这个钥匙,所以凡是有self的函数就可以调用init房间的东西(变量)。

三、Self在Odoo中的使用

        在odoo中经常可以看到self.env,self.env.cr等等,那么这些又是什么?怎么使用呢?

        Odoo中使用的self,是对 游标cr、用户ID、模型、上下文、记录集、缓存 的封装。我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr、self.uid。

        env是环境,储存了模型的缓存记录集,因此我们可以通过环境来获取、增加、修改、删除记录,而触发数据库更改,从而达到操作数据库的目的。

self.env提供对请求参数和其他有用的访问
self.env.cr 或 self._cr数据库的游标对象,可用于对数据库的操作
self.env.user访问当前用户,当前用户的记录
self.env.context 或 self._context上下文字典
self.env.ref(xml_id)返回对应于XML id的记录
self.env[model_name]返回给定模型的实例

目前我最常使用到的一个普通查询:

  1. self.search(domain) //从当前模型的self中查询

  2. self.env['model'].search(domain) // 获取某个model的环境,查询其中的记录集

举报

相关推荐

0 条评论