OOP:
- 创建实例——填充实例属性。
- 行为方法——在类方法中封装逻辑。
- 运算符重载——为打印这样的内置操作提供行为。
- 定制行为——重新定义子类中的方法以使其特殊化。
- 定制构造函数——为超类步骤添加初始化逻辑。
定制类的构造函数
>>> class Person: #建立一个超类 def __init__(self,name,age=0,job=None,pay=0): self.name = name self.age = age self.job = job self.pay = pay def __str__(self): return '[Person:%s,%s,%s,%s]'%(self.name,self.age,self.job,self.pay) >>> class Manage(Person): def __init__(self,name,age,pay): Person.__init__(self,name,age,'manage',pay) #定制子类中的构造函数 >>> James=Manage('James',25,100000) >>> print(James) [Person:James,25,manage,100000]
把对象储存到数据库中(Pinkle和Shelve)
- pickle 任意python对象和字节串的序列化
- dbm(python2.6中叫做anydbm) 实现一个可通过键访问的文件系统,以存储字符串
- shelve 使用另两个模块按照键吧python存储到一个文件中
#person.py class Person: def __init__(self,name,age=0,job=None,pay=0): self.name = name self.age = age self.job = job self.pay = pay def __str__(self): return '[Person:%s,%s,%s,%s]'%(self.name,self.age,self.job,self.pay) class Manage(Person): def __init__(self,name,age,pay): Person.__init__(self,name,age,'manager',pay) #makedb.py from person import Person,Manage import shelve #导入shelve kobe = Person('kobe') james = Person('james',29,'basketball player',10000000) messi = Manage('Messi',25,1000001) db = shelve.open('persondb') #打开一个数据库,如果不存在则创建 for object in (kobe,james,messi): db[object.name] = object #把对象的名字做键赋给shelve db.close()
探索shelve
>>> import glob
>>> glob.glob('person*') #调用glob函数查询person文件 ['person.py', 'persondb.bak', 'persondb.dat', 'persondb.dir'] >>> print(open('persondb.dir').read()) #打印person.dir文件 'kobe', (0, 87) 'Messi', (1024, 104) 'james', (512, 114) >>> print(open('persondb.dat','rb').read()) b'\x80\x03cperson\nPerson\nq\x00)\x81q\x01}q\x02(X\x03\x00\x00\x00ageq\x03K\x00X\x03\x00\x00\x00payq\x04K\x00X\ ......
>>> import shelve #导入shelve包 >>> db = shelve.open('persondb') #打开persondb.db数据库文件 >>> print(db) <shelve.DbfilenameShelf object at 0x0000000003536048> >>> list(db.keys()) #打印数据库键 ['kobe', 'Messi', 'james'] >>> k = db['kobe'] >>> print(k) [Person:kobe,0,None,0]
浙公网安备 33010602011771号