《Python基础教程》

挪威 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将相关函数绑定到属性上去,从功能上来讲没有太大区别。但从形式上来讲,使用装饰器可以有效节省几个不必要的函数名。

添加新评论