首页 > 代码库 > python学习之类的继承

python学习之类的继承

面向对象中一个重要的特性就是继承,继承的好处就是提高代码的重用率,减少不必要的代码。继承是父类与子类的关系,当子类继承了父类后,就具有了父类的所有变量和方法。在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()函数。