关于类的小笔记

#-*- 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

posted on 2012-08-17 07:23  balian  阅读(278)  评论(1编辑  收藏  举报