标签:eric 自己的 构造 运算 运算符 一个人 方法调用 机制 sel
到目前为止,我们所看的大多数例子都是人为创造而且是独立完备的,其目的是为了帮助你把注意力集中在基础知识上。然而,本章的结尾是一个较大的例子,把我们所学的大多数概念都聚合在这里。这个例子几乎是需要自行研究的练习题:试着看这个例子的程序代码,来了解方法调用是如何解析的。
简而言之,下列模块person.Py定义了三个类:
当你研究这个模块的代码时,你会看见每个实例都有自己的状态信.息。注意继承是如何应用于混合并对行为定进行制,以及运算符重载是如何用于对实例进行初始化和打印实例的。
要测试此程序代码时,我们可以在交互模式下导入这个模块并创建实例。例如,下面是对Person类的运用。建立实例时会触发__init__,接着调用一些方法,来使用或修改实例状态(属性),并在打印实例时,运行继承的的Str从而打印了所有的属性。
最后,下面是文件自我mll试逻辑(位于最后的代码,就用__name__测试下面的代码)的输出,它创建一个人物和一个员工,并对其进行修改。就像往常一样,当文件以顶层脚本执行时,这个自我测试程序代码才会运行,当作为库模块导入时则不会。注意员工是如何继承打印格式和姓氏提取的,有更多的状态信息,还有另一个方法用来加薪,而且可以执行专有化版本的生日方法(过生日老两岁)。
跟踪这个例子中的代码,从而了解这些输出所反映的方法调用。这个例子涵盖了Python
中00P机制的大多数概念。
现在,已经了解了Python类,可能意识到,这里所用的类几乎就像是函数包,嵌套附加在实例上的属性的内置对象,作为状态信息,并对其进行管理。例如,当lastName方法切割并进行索引运算时,只是在对类所管理的对象进行内置的字符串和列表处理运算。运算符重载和继承(在类树中自动查找属性)是蓝图中主要的00P工具。最后,这可以让类树底端的Employee获得得不少“免费”的行为,而这也是OOP内含主要概念。
#!/usr/bin/env python # -*- coding:utf-8 -*- class GenericDisplay: def gatherAttrs(self): attrs = "\n" for key in self.__dict__: attrs += ‘\t%s=%s\n‘ % (key, self.__dict__[key]) return attrs def __str__(self): return ‘<%s: %s>‘ % (self.__class__.__name__, self.gatherAttrs()) class Person(GenericDisplay): def __init__(self, name, age): self.name = name self.age = age def lastName(self): return self.name.split()[-1] def birthDay(self): self.age += 1 class Employee(Person): def __init__(self, name, age, job=None, pay=0): Person.__init__(self, name, age) self.job = job self.pay = pay def birthDay(self): self.age += 2 def giveRaise(self, percent): self.pay *= (1.0 + percent) if __name__ == ‘__main__‘: bob = Person(‘Bob Smith‘, 40) print(bob) print("--------------------------------") print(bob.lastName()) bob.birthDay() print(bob) print("--------------------------------") sue = Employee(‘Sue jones‘, 44, job=‘dev‘, pay=100000) print(sue) print(sue.lastName()) sue.giveRaise(0.10) print(sue)
运行结果:
<Person: name=Bob Smith age=40 > -------------------------------- Smith <Person: name=Bob Smith age=41 > -------------------------------- <Employee: name=Sue jones age=44 job=dev pay=100000 > jones <Employee: name=Sue jones age=44 job=dev pay=110000.00000000001 >
标签:eric 自己的 构造 运算 运算符 一个人 方法调用 机制 sel
原文地址:http://www.cnblogs.com/chenlin163/p/7307824.html