关于类的小笔记
#-*- encoding: utf-8 -*- # 这是本书330页13.1关于类,子类,继承的例子,加上了一些注释 # ---- (1)定义类(和方法) class AddrBookEntry(object): # 定义了类AddrBookEntry,类名通常用大写字母开头 # | | | # 关键字 | 参数,如果没有父类(基类),这里的(object)可以省略 # 类名 'address book entry class 地址簿录入类' # 函数或者类的文档字串 def __init__(self, nm, ph): # 定义构造器,__init__()是一个特殊的方法 # | | # 关键字 self参数,所有方法声明中都存在 # 这里定义一个方法__init__(),也就是给类添加功能 self.name = nm # 设置name,nm是该类的属性 self.phone = ph # 设置phone,ph是该类的属性 print 'Created instance for:', self.name def updatePhone(self, newph): # 定义方法updatePhone() # | | # 关键字 self参数,所有方法声明中都存在 self.phone = newph print 'Updated phone # for: ', self.name # ----------- 以上是定义类和方法,以下是创建实例,也叫实例化 --------------- # ---- (2)创建一个实例 john = AddrBookEntry('John Doe', '408-555-1212') # 为John Doe创建实例 jane = AddrBookEntry('Jane Doe', '408-555-1212') # 为Jane Doe创建实例 print "John's phone # ", john.phone # ---- (3)用这个实例调用方法 john.updatePhone('415-555-1212') print "John's new phone #: ", john.phone # 如果单单是john.phone,就要访问实例的属性 # ----------- 以下是通过继承来创建一个子类(被派生出来),子类将保持父类(基类)的所有特性(属性) ---------- # ---- (a)定义子类(和方法) class EmpAddrBookEntry(AddrBookEntry): # | # 子类声明中参数使用父类(基类)名,不再是object 'Employee Address Book Entry class 员工地址类' # 函数或者类的文档字串 def __init__(self, nm, ph, id, em): # 定义构造器,__init__()是一个特殊的方法 # | | # 关键字 self参数,所有方法声明中都存在 # 这里定义一个方法__init__(),也就是给子类添加功能 AddrBookEntry.__init__(self, nm, ph) #父类(基类)的构造器必须写出 self.empid = id self.email = em def updateEmail(self, newem): # 定义方法updateEmail() self.email = newem print 'Updated E-mail address for:', self.name # ---- (b)创建一个子类实例 john = EmpAddrBookEntry('John Doe', '408-555-1212', 42, 'john@spam.doe') # 为John Doe创建实例 print john.empid, john.name, ': ', john.phone, john.email # ---- (c)用这个子类实例调用子类方法 john.updateEmail('john@doe.spam') print john.empid, john.name, ': ', john.phone, john.email # ---- (d)用这个子类实例调用基类(父类)方法 john.updatePhone('555-999-1243') print john.empid, john.name, ': ', john.phone, john.email
运行结果
Created instance for: John Doe
Created instance for: Jane Doe
John's phone # 408-555-1212
Updated phone # for: John Doe
John's new phone #: 415-555-1212
Created instance for: John Doe
42 John Doe : 408-555-1212 john@spam.doe
Updated E-mail address for: John Doe
42 John Doe : 408-555-1212 john@doe.spam
Updated phone # for: John Doe
42 John Doe : 555-999-1243 john@doe.spam