python绑定方法和无绑定方法
来源:互联网 发布:服务器端口 编辑:程序博客网 时间:2024/05/21 06:38
方法是对象:绑定或无绑定
无绑定类方法对象:无self
绑定实例方法对象:self+函数对
1
2
3
class
Spam:
def
doit(
self
, message):
print
(message)
现在,在=正常操作中,创建了一个实例,在单步调用了他的方法,从而打印出传入的参数message:
1
2
object1
=
Spam()
object1.doit(
"hello world"
)
不过,其实,绑定方法对象实在过程中产生的,就是在方法调用的括号前。事实上,我们可以获取绑定方法,而不用实际进行地啊用。oject.name点号结合运算是一个对象表达式。在下列的代码中,会传回绑定方法对象,把实例(object1)和方法函数(Spam.doit)打包起来。我们可以把这个绑定方法赋值给另一个变量,然后像简单函数那样进行调用。
1
2
3
object1
=
Spam()
x
=
object1.doit
#绑定方法对象:instance+function
x(
"hello world"
)
#与object1.doit("hello world")效果相同
优点:绑定方法对象可以保留对象的状态信息。如果使用简单函数,状态信息一般使用全局变量来进行保存。
另一方面,如果对类进行点号运算来获取doit,就会得到无绑定方法对象,也就是函数对象的引用值,要调用这类方法时,必须传入实例作为最左参数
1
2
3
object1
=
Spam()
t
=
Spam.doit
#未绑定方法对象,在python3.0是一个函数
t(object1,
"hello world"
)
#传入一个实例
扩展一下,如果我们引用的self的属性是引用类中的函数,那么相同的规则也适用于类的方法。serlf.method表达式是绑定方法对象,因为self是实例对象。
1
2
3
4
5
6
7
8
class
Eggs:
def
m1(
self
, n):
print
(n)
def
m2(
self
):
x
=
self
.m1
#另一个绑定方法对象
x(
42
)
#就像一个简单函数
Eggs().m2()
#打印出42
大多数时候,通过点号运算取出方法后,就是立即调用,所以你不会注意到这个过程中产生的方法对象。如果开始编写以通用方式调用对象的程序代码时,就得小心,特别注意无绑定方法,无绑定方法一般需要传入明确的实例对象。
1 0
- python绑定方法和无绑定方法
- 关于Python绑定方法和非绑定方法的思考
- 绑定和非绑定方法
- 关于python方法绑定
- python绑定方法
- 方法调用绑定--前期绑定和后期绑定
- python类的绑定方法与非绑定方法
- python 类和实例绑定属性和方法的总结
- Python学习:给类的实例绑定属性和方法
- python 中给class动态绑定属性和方法
- python学习:实例动态绑定属性和方法
- python绑定c++程序 --boost python方法
- Python绑定方法,未绑定方法,类方法,实例方法,静态方法
- 有关python给类绑定方法
- python 使用MethodType绑定方法到类
- python 使用MethodType绑定方法到类
- ASP.NET GridView绑定数据方法和转换绑定数据
- 绑定方法与非绑定方法
- 47.使用外部 JavaScript 和 CSS(8)
- Android应用性能优化之使用SQLiteStatement优化SQLite操作
- 洛谷 P1970 [NOIP2013 D2T2] 花匠
- linux如何把普通用户添加到sudo组
- MySQL之—— linux下 MYSQL定时备分
- python绑定方法和无绑定方法
- JAVA回收机制的初步认识
- 项目的第三天
- js拖拽事件及bug修复
- NKOI 3804 机器人M号
- 用js提交表单
- LeetCode: Best Time to Buy and Sell Stock
- poj_2109 Power of Cryptography(技巧)
- 白宫对未来人工智能的规划报告