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.如何声明一个数组? ① 使用字面量声明: 在 ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之0806平均分
题目
- 在Web Api中快速实现JSonp
本文翻译自:http://www.codeproject.com/Tips/631685/JSONP-in-ASP-NET-Web-API-Quick-Get-Started Concept: 同源策 ...
- Session 转台服务器的使用方法
Session的缺陷:为了保持自身的稳定,IIS在访问量大的时候,可能会不自觉的重启,这时候Session就会丢失用户就会被迫下线 解决方案1:将Session放到一个专门的转台服务器上 方案2:将S ...
- C语言,变量与内存
一.数在计算机中的二进制表示 符号位:最高位为符号位,正数该位为0,负数该位为1: 原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值 反码:正数的反码是其本身:负数的反码是在 ...
- cocos2dx 在windows上实现键盘输入
cocos2d主要面向的是触摸屏幕设备的,在WINDOWS下的定位感觉多多少少就是相当于一个模拟器,因此并没有太多的PC下重要的键盘支持.然而响应键盘消息对于调试来说可以提供不少方便.下边就通过更改c ...
- Session for Tornado(Redis) - 代码分享
Session for Tornado(Redis) - 代码分享 Session for Tornado(Redis) session id的生成借用了web.py. 使用了 redis 的 h ...
- android 设置字体颜色、EditText自己主动输入转换成大写字母的多种方式
在TextView上面设置某一个字的字体颜色为指定颜色时,能够通过java类SpannableString类和Html语言来实现. (一)SpannableString类方式 private void ...
- Jquery文本框小例(必填框)
<script src="../JavaScript/jquery-2.0.2.min.js"></script> <script type=&quo ...
- axure网格设置
Axure默认的界面是没有吧网格显示出来,没有网格在制作原型的时候,对齐方面不是很好,个人习惯还是把网格显示出来,便于组件对齐和布局. 其实本来这篇文章应该叫做网格与参考线,只是本人对参考线的应用还很 ...
- jQuery EasyUI API 中文文档 - 分隔按钮(splitbutton)
<html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...