Python3.2官方文档翻译--实例对象和方法对象
6.3.3 实例对象
如今我们用实例对象做什么呢?实例对象唯一可用的操作就是属性引用。如今有两种合法的属性名称:数据属性和方法。
数据属性相当于smallTalk中的实例变量,C++中的数据成员。数据属性不须要申明。像局部连梁一样,当他们初次赋值的时候他们就存在了。比如,假设x是上面创建MyClass类的一个实例, 以下的代码块表示将会打印值16.这个值没有不论什么错误。
x.counter = 1
while x.counter < 10:
x.counter = x.counter*2
print(x.counter)
del x.counter
实例属性引用的还有一中方法是方法。方法是属于对于对象的函数。(在python中,术语方法和类实例不是唯一的):其它的对象类型也有方法。比如,list对象有称为append,insert,remove,sort方法等等。可是,在接下来的讨论中,除非特别说明,我们用术语方法来用对象实例的方法。)
一个实例对象的合法方法名称取决于它的类。依照定义,一个类中全部函数对象定义了相相应的实例方法。因此,在我们样例中,x.f是一个合法的方法引用,由于MyClass.f是一个方法,可是x.i不是,由于MyClass.i不是。可是x.f和MyClass.f不同,它时一个方法对象,而不是函数对象。
6.3.4 方法对象
通常来说,方法在绑定之后就会被调用。
X.f()
在MyClass实例中,它将会返回字符串’hello world’.可是,你无需立马调用方法:x.f是方法对象,能够暂被保存然后后来再调用,比如:
xf = x.f
while True:
print(xf())
将会不断打印hello world直到程序终止。
当方法调用时详细发生了什么?你可能已经注意到了,虽然函数定义f()时能够有个參数,但x.f()调用时候没有传參数。那參数发生了什么?当要求參数的函数没有不论什么參数而调用时,python一定会抛出异常。即使參数真正什么也没用。
其实,你能够推測答案: 方法有一个特性就是实例对象被当做第一个參数传递给了函数。在我们的样例中,x.f()方法等同于MyClass.f(x).一般来说,调用一个包括n个參数列表的方法等同于对应的函数,这个函数包括一个在首次插入方法对象时创建的列表。
假设你仍然不明确方法怎样工作,看看它的实现可能就会明确真相。 当一个实例属性引用一个不是数据属性时,它的类是可搜索的。假设这个名称表示一个合法函数对象属性,通过把在抽象类中发现的(指针)实例对象和函数对象封装一起进而创建了方法对象。当方法对象用一个列表參数调用时,一个新的參数列表将会从实例对象和參数列表中创建,而且函数对象用新的属性列表调用。
Python3.2官方文档翻译--实例对象和方法对象的更多相关文章
- Python3.2官方文档翻译--迭代器
6.9 迭代器 到眼下为止.你可能已注意到很多容器对象都能够用for语句进行循环: 这样的訪问风格清楚简洁方便. 迭代器的应用是python遍历统一.在这样的场景背后.for语句调用容器对象iter( ...
- Python3.2官方文档翻译--作用域和命名空间实例
6.2.1 作用域和命名空间实例 以下的实例主要用来示范怎样引用不同的作用域和命名空间,keywordglobal和nonlocalru怎样影响变量绑定. 实例执行结果是: After local a ...
- Python3.2官方文档翻译--继承
6.5 继承 当然,一门语言特性假设不支持继承那么名称类就失去了价值.子类继承父类的方法例如以下: class DerivedClassName(BaseClassName): <stateme ...
- Python3.2官方文档翻译--作用域和命名空间
6.2 Python作用域和命名空间 在介绍类之前.首先我想告诉你一些关于python作用域的规则. 类的定义很巧妙地运用了命名空间,你须要知道范围和命名空间的工作原理以能全面了解接下来发生的. 顺便 ...
- ABP官方文档翻译 4.3 校验数据传输对象
校验数据传输对象 校验简介 使用数据标注 自定义校验 禁用校验 标准化 校验简介 应用的输入首先应该被校验.输入可以是用户的也可以是其他应用的.在一个web应用中,校验通常实现两次:客户端和服务端.客 ...
- Python3.2官方文档翻译--输出格式化
第八章 标准库二 第二部分涵盖了很多更能满足专业开发者需求的高级模块.这些模块在小脚本中非常少出现. 8.1 输出格式化 Reprlib模块为大型的或深度嵌套的容器缩写显示提供了repr()函数的一个 ...
- Python3.2官方文档翻译--标准库概览(一)
7.1 操作系统接口 Os模块提供主要很多与操作系统交互的函数. >>> import os >>> os.getcwd() # Return the curren ...
- 整理JavaScript循环数组和对象的方法
众所周知,常用的循环语句有for.while.do-while.for-in,forEach以及jQuery中提供的循环的方法:以及ES6中提供的很多用来循环对象的方法如map, 在 Javascri ...
- js数组、内置对象、自定义对象
[js中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下表访问数字的每个元素. 2.如何声明一个数组? ① 使用字面量声明: 在 ...
随机推荐
- Qt学习之路(24): QPainter(改写paintEvent)
多些大家对我的支持啊!有朋友也提出,前面的几节有关event的教程缺少例子.因为event比较难做例子,也就没有去写,只是把大概写了一下.今天带来的是新的部分,有关Qt的2D绘图.这部分不像前面的内容 ...
- jquery $.post
jQuery.post() jQuery.post( url [, data ] [, success ] [, dataType ] )Returns:jqXHR Description: Load ...
- 11181 - Probability|Given
N friends go to the local super market together. The probability of their buying something from them ...
- this小记
this小记 太久没有研究底层的js相关,今晚差点被紫红爸爸上课了. 正题 var net=new Object(); //定义一个全局变量net net.AjaxRequest=function(u ...
- 终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理(显示透明会导致计算无效区域的方式有所不同——透明的话应减少剪裁区域,所以要进行仔细计算)
在研究TCustomControl的显示过程中,怎么样都找不到刷新FWinControls并重新显示的代码: procedure TWinControl.PaintHandler(var Messag ...
- VDI转vmdk(VirtualBox与VMware硬盘格式转换)[转]
VirtualBox用了一段时间,感觉没想像中那么的好.虽然设置里可以分配多CPU,但是分配多CPU后经常系统挂掉.整体感觉不够稳定,但它也有好处就是开源免费.但经常挂机总不能一直使用它,索性转到Vm ...
- 将某个MySQL库中的UTF8字符列都转成GBK格式
DELIMITER $$ DROP PROCEDURE IF EXISTS `dba`.`Proc_ChangeCharacter2GBK`$$ CREATE DEFINER=`root`@`%` P ...
- 621 - Secret Research
Secret Research At a certain laboratory results of secret research are thoroughly encrypted. A res ...
- commondatastorage.googleapis.com訪问失败高速解决
谷歌更新以后非常多sampleproject下载不了. http://commondatastorage.googleapis.com訪问失败高速解决这个问题. 使用在线代理就可以,随便推荐一个htt ...
- CF 552C 进制转换
http://codeforces.com/problemset/problem/552/C C. Vanya and Scales time limit per test 1 second memo ...