创建一个类(类定义):
# !/usr/bin/env python
# -*- coding: utf-8 -*-
class AddrBookEntry(object): ##类定义
def __init__(self,nm,ph): ##定义构造器
self.name=nm
self.phone=ph
print '----------'
print name,phone
a=AddrBookEntry('aaa','bbb')
print a.phone
在AddrBookEntry 类的定义中,定义了两个方法:
__init__()和 updatePhone()。
__init__() 在实例化时被调用, AddrBookEntry()被调用时。
你可以认为实例化是对__init__()的一种隐式调用,
因为传给 AddrBookEntry()的参数完全与__init__()接收到的参数是一样的(除了 self,
它是自动传递的)。
回忆一下,当方法在实例中被调用时,self(实例对象)参数自动由解释器传递,
所以在上面的__init__()中,需要的参数是nm和ph,
创建实例(实例化):
创建实例(实例化)
>>> john = AddrBookEntry('John Doe', '408-555-1212') #为 John Doe 创建实例
>>> jane = AddrBookEntry('Jane Doe', '650-555-1212') #为 Jane Doe 创建实例
这就是实例化调用,它会自动调用__init__(). self把实例对象自动传入__init__().
你可以在脑子里吧方法中的self用实例名替换掉。
一旦实例被创建后,
创建子类:
靠继承来进行子类话是创建和定制新类类型的一种方式,新的类将保持已存在类所有的特性。
而不会改动原来类的定义(指对新类的改动不会影响到原来的类)
对于新的类类型来说,这个新的子类可以定制只属于它的特定功能
# !/usr/bin/env python
# -*- coding: utf-8 -*-
class AddrBookEntry(object): ##类定义
# def __init__(self,nm,ph): ##定义构造器
# self.name=nm
# self.phone=ph
def updatePhone(self, newph): # 定义方法
self.phone = newph +str(100)
print 'Updated phone# for:', self.phone
class EmplAddrBookEntry(AddrBookEntry):
def __init__(self):
pass
a=EmplAddrBookEntry()
print a
print type(a)
print a.updatePhone('llll')
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a20.py
<__main__.EmplAddrBookEntry object at 0x025F7370>
<class '__main__.EmplAddrBookEntry'>
Updated phone# for: llll100
None
Process finished with exit code 0
现在我们创建了第一个子类,EmplAddrBookEntry。
Python中,当一个类被派生出来,子类继承了基类的属性。
如果需要,每个子类最好定义它自己的构造器,不然,基类的构造器会被调用。
然而,如果子类重写基类的构造器,基类的构造器就不会被自动调用了。