• python中类的继承


    在上一篇博客中介绍了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__()方法


  • 相关阅读:
    h5混合开发好用的下拉刷新插件
    设置窗体可以使用鼠标拖动大小 通过
    C# 使用System.Data.OleDb;避免oracle中文乱码问题
    C# 开启一个新进程并为新进程设置工作目录
    WPF窗体程序入口 自定义窗体启动页面
    WorkFlow WF如何为一个集合赋值
    第三方框架的使用
    AppIcon应用图标 and Launchimage启动图标的制作
    在didSelectRowAtIndexPath 里面取cell的方法
    iOS 开发技术体系
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411654.html
Copyright © 2020-2023  润新知