面向对象中一个重要的特性就是继承,继承的好处就是提高代码的重用率,减少不必要的代码。继承是父类与子类的关系,当子类继承了父类后,就具有了父类的所有变量和方法。在python中定义继承的语法是:class 派生类名(基类名)。在使用python的继承时需要注意一下几点:
(1)当父类定义了__init__()初始化方法时,子类不会自动调用,而需要我们显示调用,如果我们要扩展父类的变量,可以在__init__()添加参数。
(2)在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。
(3)Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。
举例说明
父类
#BaseModle class BaseClass: def __init__(self,name,age): self.name=name self.age=age print ("baseclass is inited") def speak(self,sth): print("Baseclass is speaking :%s"%sth); if (__name__==‘__main__‘): print("run by myself") BaseClass() else : print("i am import module")
‘‘‘
python中的__name__属性:它表示当我们执行这个模块时,看它是否是用户独立执行的,还是通过import导入后执行的,例如在这个例子中,我们执行派生模块SubModule,BaseModulde是导入的模块,因此输出了i am import module。
每个Python模块都有它的__name__,如果它是‘__main__‘,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。
‘‘‘
派生类
#SubModule import BaseModule class SubClass(BaseModule.BaseClass):#需要加上模块名,否则出错 def __init__(self,name,age,salary): BaseModule.BaseClass.__init__(self,name,age)#显示调用父类的初始化函数,并扩展变量 self.salary=salary print("subClass is inited") def talk(self ,sth): print("%s is talking %s"%(self.name,sth)) BaseModule.BaseClass.speak(self,sth)#调用父类方法时需要指明模块名.父类名 if(__name__=="__main__"): print("run by myself") s=SubClass("yping",25,1000) s.talk("a story")
运行结果
>>> i am import module run by myself baseclass is inited subClass is inited yping is talking a story Baseclass is speaking :a story >>>
结果分析:
这里首先输出“i am import module”,说明程序是先从(__name__="__main__")判断开始,首先执行父类的(__name__="__main__")判断,由于现在不是直接执行BaseModule模块,因此输出“i am import module”,接着执行子类的入口函数,实例化了一个SubClass类,首先父类初始化,然后派生类初始化,接着执行talk()函数,再调用父类speak()函数。
python学习之类的继承
时间: 2024-10-06 04:41:49