美文网首页Python小哥哥Python技巧
关于Python类、方法、对象(实例):通过一个例子看一下sel

关于Python类、方法、对象(实例):通过一个例子看一下sel

作者: 我爱学python | 来源:发表于2019-06-11 14:50 被阅读19次

我们在定义一个类时,经常会在类的各个方法中看到self,那么在程序执行时self到底起了什么作用,什么时候要加self,这一点需要我们思考并好好理解。之前在学习时没有想这么多,加之用pycharm写代码,很多地方都自动补全了,有些地方没加self,会提示错误,然后补全,没有想过这个过程,今天刚好整理一下。

1.先简单说明一下self的含义

类的方法与普通的函数只有一个特别的区别 —— 它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值, Python 会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是 self。

--- 摘自《A Byte of Python3(中文版)》

   在类方法中,按惯例第一个第一个参数通常都称为self,这个参数给方法提供一个钩子,从而返回调用的主体,也就是实例对象:因为类可以产生许多实例对象,所以需要这个参数来管理每个实例彼此不同的的数据。  

--- 摘自《Python学习手册第3版》

通过上面2段描述可以把self简单理解为实例本身,一般对类进行实例化得到一个实例对象后,通过点记法来调用类中的方法,如下

Object.method(arg1, arg2)

等价于

Class.method(Object, arg1, arg2)

self就是指那个Object

2.实际应用

在上面的例子中,程序执行过程如下:

(1)首先得到一个实例r,(PS.对类进行实例化时是类名后是要加上括号的

(2)然后通过r.run_main("POST", url, data)来执行程序

(3)其实相当于执行了:RunMethod.run_main(r, "POST", url, data ),也就是说实例本身也是一个参数,只过我们不需要传入self,python已经帮我们处理了

再反观代码结构:

(1)为了达到能够通过实例来调用类中方法的目的,每个方法都必须有一个self参数(这也是类方法和普通函数的区别)

(2)注意到在run_main()方法中我们是通过self来调用get_request()和post_request():self.post_request(url, data)

等价于  ==》 RunMethod.post_request(self, url, data ),

如果不通过self来调用get_request(),那么程序将不知道是要调用类里面定义的post_request(),结果就会报错提示你的 post_request()没定义

至于要不要在类里面的方法中加self,这就涉及到了静态方法、类方法、类(实例)方法的区别了

相关文章

  • 关于Python类、方法、对象(实例):通过一个例子看一下sel

    我们在定义一个类时,经常会在类的各个方法中看到self,那么在程序执行时self到底起了什么作用,什么时候要加se...

  • python-实例属性与类属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性。 给实例绑定属性的方法是通过实例变量,或者通过sel...

  • 第31节:实例属性和类属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性。 给实例绑定属性的方法是通过实例变量,或者通过sel...

  • 消息转发流程

    实例方法的流程 对象实例收到消息(SEL+参数) 根据存储在对象实例中的ISA到类对象,类对象依次查找Class ...

  • Python的绑定方法

    通过类的实例调用的方法(实例方法),我们称这个方法绑定在实例上。 方法是类内部定义函数,该函数的第一个参数是sel...

  • iOS + -

    +是类方法,-是对象方法. + 是可以通过类名直接调用这个方法, - 则要实例化一个对象,然后通过实例化的对象来调...

  • OC中方法@selector()的本质是什么?

    OC中对象方法调用时,会转化为Objc_msgSend(self, SEL, ...)函数,然后通过SEL在类对象...

  • Python实例方法、类方法、静态方法

    实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3...

  • Runtime-对象,类对象和元类对象

    类对象存储实例方法列表等信息,实例对象可以通过isa指针找到自己的类对象,来访问实例方法元类对象存储类方法列表等信...

  • Scrapy扩展

    先看一个例子 解释 Scrapy API的主要入口是 Crawler 的实例对象, 通过类方法 from_craw...

网友评论

    本文标题:关于Python类、方法、对象(实例):通过一个例子看一下sel

    本文链接:https://www.haomeiwen.com/subject/dykqfctx.html