在上一篇博客中介绍了python中的类和对象,详细请见http://blog.csdn.net/m0_37324740/article/details/76144902,python提供了类的继承机制,解决软件重用问题。
其格式为:
class 子类名(基类名1,基类名2...):
定义子类新特性
example 1
#导入已经定义的Dog类
class Dog:
def setname(self,name):
self.name = name
def setcolor(self,color):
self.color = color
def bark(self):
print("wang!wang!I am" + self.name + "!")
#定义GuideDog类
class GuideDog(Dog): #继承基类Dog类
#定义子类自己的__init__()方法
def __init__(self,name):
Dog.setname(self,name) #调用基类的setname()方法
#定义子类自己的guide()方法
def guide(self):
print("我正在引导我的主人!")
#创建一导盲狗对象gDog1
gDog1 = GuideDog("忠诚卫士")
gDog1.bark() #调用继承的bark()方法
gDog1.guide() #调用自己的guide()方法
运行结果:wang!wang!I am忠诚卫士! 我正在引导我的主人!
example 1中的基类没有采用__init__方法,如果采用__init__方法,这继承时分两种情况:
example 2
#定义基类Dog类
class Dog:
#使用__init__方法
def __init__(self,name):
self.name = name
def bark(self):
print("wang!wang!I am" + self.name + "!")
#定义GuideDog类
class GuideDog(Dog):
#定义子类自己的guide()方法
def guide(self):
print("我正在引导我的主人!")
#创建一导盲狗对象gDog1
gDog1 = GuideDog("忠诚卫士")
gDog1.bark()
gDog1.guide()
运行结果:
wang!wang!I am忠诚卫士! 我正在引导我的主人!example 2 中的GuideDog的初始化与基类的__init__()方法相同,故无需重新定义,直接使用即可。
example 3
#定义基类Dog类
class Dog:
#使用__init__方法
def __init__(self,name):
self.name = name
def bark(self):
print("wang!wang!I am" + self.name + "!")
#定义GuideDog类
class GuideDog(Dog):
#定义自己的__init__()方法
def __init__(self,name,year):
self.workyear = year #增加新属性workyear
Dog.__init__(self,name) #显式调用基类的__init__()方法
#定义子类自己的guide()方法
def guide(self):
print("我正在引导我的主人!")
print("我有 %d 年的工作经历!"%self.workyear)
#创建一导盲狗对象gDog1
gDog1 = GuideDog("忠诚卫士",3)
gDog1.bark()
gDog1.guide()
运行结果:wang!wang!I am忠诚卫士! 我正在引导我的主人! 我有 3 年的工作经历!
example 3 中子类的GuideDog在基类的Dog的初始化基础上增加了新属性(woekyear属性),故在定义自己的__init__()方法时,需要显式调用基类的__init__()方法