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 + -
显示快捷键?