angrykola

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

OOP:

  1. 创建实例——填充实例属性。
  2. 行为方法——在类方法中封装逻辑。
  3. 运算符重载——为打印这样的内置操作提供行为。
  4. 定制行为——重新定义子类中的方法以使其特殊化。
  5. 定制构造函数——为超类步骤添加初始化逻辑。

 

定制类的构造函数

>>> 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]

 

 

posted on 2013-11-11 17:30  kolaman  阅读(355)  评论(0)    收藏  举报