博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 进阶_OOP 面向对象编程_self 的实例绑定
阅读量:7100 次
发布时间:2019-06-28

本文共 1291 字,大约阅读时间需要 4 分钟。

目录

self 和绑定

在 Python 中 self 变量是特殊的, 其用于在实例方法中引用该方法所绑定的实例, 换句话说就是 Python 在实例化对象时会自动的将实例对象传递到类体的 self 变量中, 类体中的 self 变量代表了该类的实例对象. 实例方法无论在任何地方被调用, 实例对象总是作为第一个参数被传递进去, 从而实现了实例对象和实例方法的绑定, 这也是为什么同一个类可以实例化多个不同的实例化对象的原因之一.

所以, 当我们定义类实例方法, 在方法声明语句的参数列表中必须设置名为 self 的形参. 这也是类实例方法和常规方法最大的区别之一.

EXAMPLE:

In [5]: class AClass(object):   ...:     def __init__(self, name):   ...:         self.name = name   ...:     def show_name(self):   ...:         print self.name   ...:         In [6]: a_object = AClass('jmilkfan')In [7]: a_object.show_name()jmilkfan

调用非绑定的方法

那我们是不是不通过实例对象就一定没办法调用类实例方法了呢?

答案是否定的!

调用类实例方法的本质就是要传递一个实例对象到该方法中作为第一个实参. 我们在定义类实例方法的时候将 self 变量作为方法的第一个形参, 这样做为我们带来的好处在于, 我们通过实例对象去调用该类实例方法时, 不需要显式的传递实例对象自身给 self 形参, 这一切都交由 Python 解析器去做. 相反, 如果我们希望不需要通过实例对象就能调用类实例方法, 那么我们就显式的将实例对象传入吧.

调用非绑定方法最常间的场景就是, 我们在派生一个子类, 并且希望在子类中覆盖父类的同名方法(重载).

EXSMPLE:

In [1]: class AClass(object):   ...:     def __init__(self, name):   ...:         self.name = name   ...:         In [3]: class BClass(AClass):   ...:     def __init__(self, age):   ...:         AClass.__init__(self, name)   ...:         self.age = age   ...:

在这个例子中, 我们在子类的构造器中调用了父类的构造器, 并且显式的传递了父类构造器所需要的 self 实参 __init__(self, name) 中, 所以我们可以通过类名结合句点标识符的方式来调用父类的实例方法 AClass.__init__(self, name) .

当然, 我们之前的博文中也介绍过这种时候我们建议通过 super()内置方法来实现.

转载地址:http://zreql.baihongyu.com/

你可能感兴趣的文章
scrapy中的canonicalize_url【转】
查看>>
差分信号(Differential Signal)
查看>>
Unity3D研究院之为什么Inspector视图中脚本前面的勾选框没了
查看>>
L2-002 链表去重
查看>>
cocos2d-x 3.0 rc0 + flappybird 学习心得
查看>>
10.1综合强化刷题 Day2 morning
查看>>
洛谷——P2035 iCow
查看>>
power coefficient calculation -- post processing
查看>>
centos7上安装Hadoop集群(CentOS7+hadoop-2.8.0)
查看>>
python int() round() floor()函数的比较
查看>>
scrapy的selectors
查看>>
launcher 图标删除分析
查看>>
UILabel里字体带下划线2
查看>>
loadrunner字符串处理函数
查看>>
20165320 第四周课下补做
查看>>
布局文件中fill_parent和match_parent有什么区别?
查看>>
HTTP报文内的HTTP信息
查看>>
sublime使用技巧(1)-- 下载与插件安装
查看>>
linux 自定义快捷命令
查看>>
学习Spark——环境搭建(Mac版)
查看>>