纸上得来终觉浅,绝知此事要躬行!
Person——创建并处理关于人员的信息的一个类。
Manager——一个定制的Person,修改了继承的行为。
步骤1:创建实例
编写模块文件person.py,内含类Person:
# person.py(start)
class Person:
编写构造函数
赋给实例属性第一个值的通常方法是,在构造函数方法__init__中将它们付给self,构造函数方法包含了每次创建一个实例的时候Python会自动运行的代码。
class Person:
def __init__(self,name,job = None,pay = 0):
self.name = name
self.job = job
self.pay = pay
self就是新创建的实例对象,而name、job和pay变成了状态信息,保存在对象中(self.name = name 把本地的name赋给了self.name属性)供随后使用。
在进行中测试
Python编程是一种增量原型:编写——测试——增加——测试——…
__name__检查模块:直接运行当前模块时,执行__name__随后的语句;作为类库导入的时候则不会运行相应语句。
if __name__ == "__main__":
#self-test code
bob=Person("Bob Smith", "dev",pay = 1000)
print(bob.name,bob.pay)
步骤2:添加行为方法
类的内部能够封装操作,删除冗余,优化维护,且可以应用于类的任何实例。
class Person:
def __init__(self,name,job = None,pay = 0):
pass
def lastname(self):
return self.name.split()[-1]
def giveraise(self,percent):
self.pay = int(self.pay * (1+percent))
步骤3:运算符重载
运算符重载:用类写成的对象,可以截获并响应用在内置类型上的运算:加法、切片、打印和点号运算等。构造函数__init__:用于初始化对象的状态;__str__:打印对象时调用;……
class Person:
……
# add __str__ overload method for printing objects
def __str__(self):
return '[Person:{0},{1}]'.format(self.name,self.pay)
步骤4:通过子类定制行为
OOP有一个关键的概念:通过继承来定制化。超类/子类关系可以很好扩展,并完成继承行为,类可以继承、定制或扩展超类中已有的代码。定义Person的一个子类Manager,这里定义新的方法giveraise(),使用这种方式定义对代码维护由很重大的意义。
class Manager(Person):
def giveraise(self,percent,bonus = .10):
Person.giveraise(self,percent+bonus)
步骤5:定制构造函数
class Manager(Person):
def __init__(self,name,pay):
Person.__init__(self,name,'mgr',pay)
pass
步骤6:使用内省工具
内置的instance.__class__属性提供了一个从实例到创建它的类的链接。类中也有__name__,__bases__,提供了超类的访问。
内置的object.__dict__属性提供了一个字典,每个属性附加到一个命名控件对象。
步骤7:把对象存储到数据库中
Pickle:任意Python对象和字节串之间的序列化;
bdm:实现一个可通过键访问的文件系统,以存储字符串;
shelve:使用另外两个模块按照键把Python对象存储到一个文件中