在 python 中,def 定义的函数与类中的方法有很大的不同,两者是不同的类型。

>>> def foo():

... print "foo"

...

>>> class A:

... def bar( self ):

... print "bar"

...

>>> a = A()

>>> foo

>>> a.bar

>

>>>

类中的方法是绑定方法,会具体绑定到某一类的实例。当方法被调用时,实例对象会作为第一个参数(self),被传入到方法中。

一个类中的可调用属性一直是未绑定,当类被实例化为一个对象时才绑定到某一具体实例上。所以我们可以在任何时候对类中已定义的方法进行修改。

>>> def fooFighters( self ):

... print "fooFighters"

...

>>> A.fooFighters = fooFighters

>>> a2 = A()

>>> a2.fooFighters

>

>>> a2.fooFighters()

fooFighters

在修改之前已经实例化的对象也会改变(只要它们没有覆盖自身属性)。新添加的方法会自动与实例对象进行绑定。

>>> a.fooFighters()

fooFighters

这种直接添加或修改类中的方法只能在类上进行修改,如果只想给一个实例化的对象增加方法就会产生问题。

>>> def barFighters( self ):

... print "barFighters"

...

>>> a.barFighters = barFighters

>>> a.barFighters()

Traceback (most recent call last):

File "", line 1, in

TypeError: barFighters() takes exactly 1 argument (0 given)

当把方法直接添加到一个实例对象时,函数并没有自动与与实例对象进行绑定。其仍然是一个函数类型,而不是一个绑定方法 (bound method)。

>>> a.barFighters

我们可以使用 types 模块中的 MethodType 函数显示绑定函数到某一个实例对象上。

>>> import types

>>> a.barFighters = types.MethodType( barFighters, a )

>>> a.barFighters

>

>>> a.barFighters()

barFighters

这样修改只改变了实例 a 的方法,不会影响到其他实例。

python类与方法与函数_Python 中的函数与类的方法相关推荐

  1. python中的方法什么意思_python中的函数和方法的区别是什么

    python中的函数和方法的区别: 1.函数要手动传self,方法不用传self. 2.如果是一个函数,要用类名去调用,如果是一个方法,要用对象去调用. 举例说明:class Foo(object): ...

  2. python返回绝对值的函数_Python中用于返回绝对值的abs()方法

    Python中用于返回绝对值的abs()方法 方法abs() 返回x的绝对值,-x-零之间的(正极)的距离. 语法 以下是abs()方法的语法: abs( x ) 参数 x -- 这是一个数值表达式 ...

  3. python取两位小数点的函数_python中round函数保留两位小数的方法

    在我们日常计算的过程中,如果计算出小数,对大量的被保留数据,采用四舍五入这种保留法的误差总和是最小的,能使被保留部分的与实际值差值不超过最后一位数量级的二分之一.四舍五入是一种精确度的保留法,是我们使 ...

  4. python中choice函数_Python中choice函数的实现方法

    Python中choice函数的实现方法 发布时间:2020-12-15 09:28:06 来源:亿速云 阅读:82 作者:小新 这篇文章主要介绍Python中choice函数的实现方法,文中介绍的非 ...

  5. python中保留两位小数的函数_python中round函数保留两位小数的方法

    在我们日常计算的过程中,如果计算出小数,对大量的被保留数据,采用四舍五入这种保留法的误差总和是最小的,能使被保留部分的与实际值差值不超过最后一位数量级的二分之一.四舍五入是一种精确度的保留法,是我们使 ...

  6. python dict(zip)函数_python中zip()函数遍历多个列表方法

    在对列表的元素进行找寻时,会频繁的说到遍历的理念.对于复杂的遍历要求,如多个列表中查找就显然不适合用for循环.本篇所要带来的是zip() 函数的方法,能够对多个迭代器进行遍历.下面我们就python ...

  7. python中的translate函数_python中翻译功能translate模块实现方法

    现如今,各个国家交流密切,通过翻译使我们打破了语言壁垒,而翻译在互联网上的存在也尤为普遍.python中执行翻译操作的包是translate包,通过下载安装translate包,使用translate ...

  8. python中的类怎么定义怎么用_python中怎么定义一个类

    什么是类? 类用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下:clas ...

  9. pythonlower函数_python中lower函数实现方法及用法讲解

    之前小编介绍过python中将字符串小写字符转为大写的upper函数的使用方法(upper函数).有将小写转为大写的需要,那也有将大写转为小写的情况.本文主要介绍在python中可以将字符串大写自摸转 ...

  10. python计时器timeit返回秒数_python中的计时器timeit的使用方法

    本文介绍了python中的计时器timeit的使用方法,分享给大家,具体如下: timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过pytho ...

最新文章

  1. Socket异步通信——使用SocketAsyncEventArgs
  2. Appium定位方式总结
  3. 3.vector实现字符串类
  4. 快手2020校园招聘秋招笔试--工程B试卷
  5. 世界正在走向实时化,谈谈Twitter对流处理的理解与思考
  6. 无法解析此远程名称: 'www.***.com' 解决办法(转)
  7. (bfs)连连看(hdu1175)
  8. 非阻塞式JavaScript脚本介绍
  9. 搜索引擎广告计费系统如何防恶意点击
  10. JavaWeb使用cookie实现记住密码,密码加密
  11. ISO国家和地区代码
  12. 阿里高效沟通的秘密:向上沟通,跨部门沟通,PREP汇报...这5招绝了!
  13. Mac苹果电脑怎么创建加密文件夹
  14. GetLastError 错误代码
  15. 关于传递函数的频率响应和低通滤波器
  16. android的APEX接口实现,Apex API 请求
  17. history路由下,Whitelabel Error Page错误
  18. 社区发现之标签传播算法(LPA)
  19. 显著性物体检测与分割
  20. python彼岸图网爬取1200像素预览图

热门文章

  1. 设计模式(十四):适配器模式
  2. 【cs229-Lecture8】顺序最小优化算法
  3. 关于CentOS 7(Linux)下 软件|脚本 的自启动
  4. C++ popcount()含义
  5. 深入剖析Android音频(二)AudioSystem
  6. 跟我学习Storm_Storm基本架构
  7. Android OTA升级(1):编译升级全包
  8. linux如何写一个daemon程序
  9. 解决Nginx环境下wordpress设置固定链接打开失败问题
  10. rust如何加好友steam_《Rust》加入女性建模 角色性别将由STEAM账号决定