挪威 Magnus Lie Hetland 著
司维 等 译
人民邮电出版社
2010年7月第1版
第五章 条件、循环和其他语句
5.5 循环
5.5.4 一些迭代工具
2.编号迭代
lst = 'abcdef'
for i, v in enumerate(lst):
print('%d:%c' % (i, v))
运行结果为
0:a
1:b
2:c
3:d
4:e
5:f
第7章 更加抽象
7.4 小结
- 对象。对象包括特性和方法。特性只是作为对象的一部分变量,方法则是存储在对象内的函数。(绑定)方法和其他函数的区别在于方法总是将对象作为自己的第一个参数,这个参数一般称为self。
- 类。类代表对象的集合(或一类对象),每个对象(实例)都有一个类。类的主要任务是定义它的实例会用到的方法。
- 多态。多态是实现将不同类型和类的对象进行同样对待的特性——不需要知道对象属于哪个类就能调用方法。
- 封装。对象可以将它们的内部状态隐藏(或封装)起来。在一些语言中,这意味着对象的状态(特性)只对自己的方法可用。在Python中,所有的特性都是公开可用的,但是程序员应该在直接访问对象状态时谨慎行事,因为他们可能无意中使得这些特性在某些方面不一致。
- 继承。一个类可以是一个或者多个类的子类。子类从超类继承所有方法。可以使用多个超类,这个特性可以用来组成功能的正交部分(没有任何联系)。普通的实现方式是使用核心的超类和一个或者多个混合的超类。
- 接口和内省。一般来说,对于对象不用探讨过深。程序员可以靠多态调用自己需要的方法。不过如果想要知道对象到底有什么方法和特性,有些函数可以帮助完成这项工作。
- 面向对象设计。关于如何(或者说是否应该进行)面向对象设计有很多的观点。不管你持什么观点,完全理解这个问题,并且创建容易理解的设计是很重要的。
第9章 魔法方法、属性和迭代器
9.5 属性
9.5.1 property 函数
property
可以将一些特定功能函数绑定到指定属性上。property
原型为property(fget, fset, fdel, doc)
。下面是一个示例:
class Test:
def __init__(self):
self._val = 0
def getVal(self):
return self._val
def setVal(self, val):
self._val = val
def delVal(self):
self._val = -1
value = property(getVal, setVal, delVal)
t = Test()
t.value = 10
print(t.value)
del t.value
print(t.value)
程序将返回
10
-1
当然这样的代码太过繁琐,以简洁为美的Python当然还有更漂亮实现形式:
class Test:
def __init__(self):
self._val = 0
@property
def value(self):
return self._val
@value.setter
def value(self, val):
self._val = val
@value.deleter
def value(self):
self._val = -1
t = Test()
t.value = 10
print(t.value)
del t.value
print(t.value)
使用装饰器来声明函数,和先声明函数再用property
将相关函数绑定到属性上去,从功能上来讲没有太大区别。但从形式上来讲,使用装饰器可以有效节省几个不必要的函数名。