booklst2.py
来自「python web programming 部分」· Python 代码 · 共 71 行
PY
71 行
class Table:
def __init__(self, *columnames):
"""Creates table definition: assumes first column is key."""
self.columnames = columnames
self.key = self.columnames[0]
self.records = {}
def addrec(self, **kwargs):
"""Adds a record to a table."""
if not kwargs.has_key(self.key):
raise ValueError, "record must have value for key column "+self.key
newrec = Record(self.columnames, **kwargs)
self.records[kwargs[self.key]] = newrec
def getrec(self, k):
return self.records[k]
def values(self):
return self.records.values()
class Record:
def __init__(self, columnames, **kwargs):
for k in kwargs.keys():
if k not in columnames:
raise NameError, "table has no column named "+k
setattr(self, k, kwargs[k])
PUBLISHER = Table("PubNo", "PubName", "PubWebSite")
PUBLISHER.addrec(PubNo=1, PubName="New Riders", PubWebSite="www.newriders.com")
PUBLISHER.addrec(PubNo=2, PubName="O'Reilly", PubWebSite="www.ora.com")
AUTHOR = Table("AutNo", "AutLast", "AutFirst", "AutLoc")
AUTHOR.addrec(AutNo=1, AutFirst="David", AutLast="Beazley", AutLoc="USA"),
AUTHOR.addrec(AutNo=2, AutFirst="Steve", AutLast="Holden", AutLoc="USA"),
AUTHOR.addrec(AutNo=3, AutFirst="Mark", AutLast="Lutz", AutLoc="USA"),
AUTHOR.addrec(AutNo=4, AutFirst="David", AutLast="Ascher", AutLoc="USA"),
AUTHOR.addrec(AutNo=5, AutFirst="Mark", AutLast="Hammond", AutLoc="Australia"),
AUTHOR.addrec(AutNo=6, AutFirst="Andy", AutLast="Robinson", AutLoc="UK")
BOOK = Table("BkISBN", "AutNo", "BkName", "PubNo", "BkYear")
BOOK.addrec(BkISBN="0000000001",
AutNo=(1, ),
BkName="Python Essential Reference",
PubNo=1,
BkYear=2001),
BOOK.addrec(BkISBN="0000000002",
AutNo=(2, ),
BkName="Web Programming in Python",
PubNo=1,
BkYear=2001),
BOOK.addrec(BkISBN="0000000003",
AutNo=(3, 4),
BkName="Learning Python",
PubNo=2,
BkYear=1999),
BOOK.addrec(BkISBN="0000000004",
AutNo=(5, 6),
BkName="Programming Win32 on Python",
PubNo=2,
BkYear=1999)
for b in BOOK.values():
print "%12s %-20s %-30s %-12s %d" % (
b.BkISBN, # ISBN
" and ".join([AUTHOR.getrec(i).AutLast for i in b.AutNo]),
b.BkName,
PUBLISHER.getrec(b.PubNo).PubName,
b.BkYear)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?