python绑定调用和非绑定调用
绑定调用和非绑定调用
在python中,绑定调用和非绑定调用其实是相对于类和实例来说的。抽象点说就是:在类实例化过程中,类的方法会绑定在实例
之中,此时,这个实例
会拥有这个类的具体属性和方法,这些属性和方法已经和这个实例
合为一体,就算类消失了或者改变了,也不会影响到实例
。看例子很容易知道:
In [1]: class A(object):
...: def sayhello(self):
...: print("hello")
...:
In [2]: a = A()
In [3]: a.sayhello()
hello
接着上面的代码,我们对类A进行修改,将类A的sayhello()方法删除:
In [5]: class A(object):
...: pass
...:
In [6]: a.sayhello()
hello
看,实例a还能正常使用方法sayhello。所谓绑定,就是将类中的方法绑定到实例中。
知道了绑定调用时什么,非绑定调用就呼之欲出了:
调用没有绑定到具体实例中的方法就是非绑定调用。当类改变时,方法也随之消失,调用不了。看例子:
In [9]: class A(object):
...: def Hello(self):
...: print("Hello, nice to meet you...")
...:
In [10]: A.Hello(A())
Hello, nice to meet you...
In [11]: class A(object):
...: pass
...:
In [12]: A.Hello(A())
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-ad9a8d78a351> in <module>()
----> 1 A.Hello(A())
AttributeError: type object 'A' has no attribute 'Hello'
代码很直白了。这里的疑问是,为什么在进行非绑定调用时要传经参数A()
?其实,这又涉及到python中的method种类。我们看到,在类A中定义def Hello(self)
中的self参数,这就意味这这是一个实例方法
(instancemethod)。self是一个实例参数,要传递一个实例进去,所以我们将实例A()
传进去。
而关于python中的各种method区别,看这里。
我们换一种方式来定义类方法就会更直白:
In [13]: class A(object):
...: def Hello():
...: print("Hell0, nice to meet you...")
...:
In [14]: A.Hello()
Hell0, nice to meet you...
In [15]: class A(object):
...: pass
...:
In [16]: A.Hello()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-16-d3af5ce93a22> in <module>()
----> 1 A.Hello()
AttributeError: type object 'A' has no attribute 'Hello'
结论
同一个方法,在不同情况下,可以被绑定调用和非绑定调用。
版权:保留所有权,转载请注明出处!
python绑定调用和非绑定调用的更多相关文章
- Day7 子类调用父类的方法supper 绑定方法与非绑定方法
supper:可以利用supper来重用父类的方法,可以不用指名道姓的调用了. class OldboyPeople: school = 'oldboy' def __init__(self,name ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- 全面解析python类的绑定方法与非绑定方法
类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...
- Python开发基础-Day21多态与多态性、绑定方法和非绑定方法
多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...
- python基础之多态与多态性、绑定方法和非绑定方法
多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...
- Python面向对象之封装、property特性、绑定方法与非绑定方法
一.封装 ''' 1.什么封装 封:属性对外是隐藏的,但对内是开放的(对内是开放的是因为在类定义阶段这种隐藏已经发生改变) 装:申请一个名称空间,往里装入一系列名字/属性 2.为什么要封装 封装数据属 ...
- Day 5-5 绑定方法与非绑定方法
绑定方法与非绑定方法: 在类内部定义的绑定方法,分两大类: classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入 ...
- Learning-Python【25】:绑定方法与非绑定方法
类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...
- 类的封装,property特性,类与对象的绑定方法和非绑定方法,
类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你 ...
随机推荐
- leetcode: 0204 完成的
目录 大纲:0204 完成的 notes ✅1051 高度检查器 ✅ 728 自除数 brute c解答: java switch 语句 java api: array 直接有 length 属性 , ...
- Maven____笔记摘抄
1 1.maven的作用 i.增加第三方Jar (spring-context.jar spring-aop.jar ....) ii.jar包之间的依赖关系 (spring-context.jar ...
- 十四、制作优美的div弹框
功能描述:确认[调整按钮]弹出精美div弹框 1.jsp页面:perfectAlertDiv.jsp <%@ page contentType="text/html;charset=U ...
- windows网络编程-C语言实现简单的TCP协议聊天
TCP/IP协议(面向连接协议)类似于打电话时,对方一定在手机附近并且此刻都在和对方进行通话.一定保证双方都在线,才能进行数据传输.UDP/IP协议(无连接协议)就像邮箱,不保证对方一定在等你邮件且对 ...
- System.Web.Compilation.BuildManager.CopyPrecompiledFile 並未將物件參考設定為物件的執行個體
使用MSBUild 的 aspnet_compiler.exe 发布网站, 过程中出现错误 [NullReferenceException]: 並未將物件參考設定為物件的執行個體 System.W ...
- C语言的变量存储方式和生存期
2020.2.28日,封城一个多月了,紧邻毕业期,我在家抽空学习一下C. 看到了变量的存储方式和生存期这一章节,下面就是我整理的内容 下面是用于理解静态局部变量这个概念所写的代码,主要是需要分析一下函 ...
- MySQL之可视化软件
MySQL可视化客户端 多款可视化界面,总有一款适合你 个人推荐使用MySQL官方提供的可视化工具. 下载链接 使用方法链接
- c++子类父类关系(翁恺c++公开课[15-16]学习笔记)
关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...
- 820复试算法 快排找第 k 小
done {20-01-30 12:56} ref: https://blog.csdn.net/fengsigaoju/article/details/50728588 note: void qui ...
- Android学习笔记17:单项选择RadioButton和多项选择CheckBox的使用
请参见 http://www.android100.org/html/201406/05/19495.html