Python 进阶_OOP 面向对象编程_self 的实例绑定

简介: 目录目录self 和绑定调用非绑定的方法self 和绑定在 Python 中 self 变量是特殊的, 其用于在实例方法中引用该方法所绑定的实例, 换句话说就是 Python 在实例化对象时会自动的将实例对象传递到类体的 self 变量中, 类体中的 self 变量代表了该类的实例对象.

目录

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()内置方法来实现.

相关文章
|
1月前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
23 2
|
21天前
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
70 0
|
1月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
24 1
|
1月前
|
Python
Python中的push方法详解与实例
Python中的push方法详解与实例
|
1月前
|
Python
Python 练习实例100
Python 练习实例100
|
1月前
|
Python
Python 练习实例98
Python 练习实例98
|
1月前
|
数据处理 Python
Python内置时间模块:Datetime实例详解(一)
Python内置时间模块:Datetime实例详解(一)
|
1月前
|
Python
Python 练习实例99
Python 练习实例99
|
2月前
|
存储 Java 程序员
30天拿下Python之面向对象编程
30天拿下Python之面向对象编程
18 3
|
2月前
|
Python
Python 练习实例97
Python 练习实例97
下一篇
无影云桌面