zoukankan      html  css  js  c++  java
  • 14 python类的继承

      1 ---------------1 类的继承  ---------------------
      2 
      3 class Site(object):  ## 继承OBJECT基类
      4     """docstring for ."""
      5     def __init__(self, name,address,course):
      6         self.name=name
      7         self.address=address
      8         self.course=course
      9     def about(self):
     10         print (self.name,self.address,self.course)
     11 
     12 
     13 class XXKT(Site): ##继承Site类
     14     """docstring for XXKT."""
     15     def __init__(self):
     16         super(XXKT,self).__init__('jim','www.baidu.com','100')  ## 构造时,调用父类的构造方法
     17         Site.__init__('jim','www.baidu.com','100')  ## 此法也是可以的
     18         print "xxxx"  ## 或者是直接覆盖掉父类的构造方法
     19 
     20 a=XXKT()  ## 实例化
     21 a.about() ## 访问父类的实例方法
     22 print (a.name)  ## 访问父类的实例属性
     23 print (a.address)  ## 访问父类的实例属性
     24 print (a.course)   ## 访问父类的实例属性
     25 
     26 
     27 ---------------1 类的多重继承  ---------------------
     28 class Bird(object):  ## 鸟
     29     def fly(self):
     30         print "fly ....."
     31 
     32 class Fish(object):  ## 鱼
     33     def swim(self):
     34         print "swim ...."
     35 
     36 
     37 class FishFLY(Bird,Fish):  ## 多重继承,飞鱼
     38     pass
     39 
     40 a=FishFLY()
     41 a.fly()
     42 a.swim()
     43 
     44 
     45 --------------3, 类的方法的覆盖--------------------------------------
     46 覆盖:
     47     即子类的方法和父类的方法重名,
     48     则调用这个方法时,则只会调用子类的方法,
     49     当然也可以强制访问父类的方法(需要用到super(),显示调用)
     50 
     51 ----------方法的覆盖 之 构造方法--------------------
     52 class ClassName(object):
     53     def __init__(self, arg):
     54         print(arg)
     55 
     56 class Classname2(ClassName):
     57     def __init__(self):   ## 如果父类构造函数有参数,
     58         print ("xxx")     ## 则如果子类不重写构造函数,则子类实例化时会调用父类的,则子类实例化时必段也要有参数,
     59                           ## 如果子类重写了构造函数,则会覆盖掉父类的构造函数,父类构造函数则不会被执行,除非显示的使用super.
     60         super(Classname2,self).__init__('ddd')  ##python2的写法
     61         super().__init__('dddd')  ##python3的写法
     62 
     63 
     64 p2=Classname2()
     65 
     66 ------------------------
     67 Python子类调用父类内属性的方法
     68 
     69 最常见的就是初始化方法__init__()
     70 
     71 python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,
     72 如果子类不实现这个函数,初始化时调用父类的初始化函数,
     73 如果子类实现这个函数,就覆盖了父类的这个函数,
     74 既然继承父类,就要在这个函数里显式调用一下父类的__init__(),
     75 ##!!!!!这跟C++,jAVA不一样,他们是自动调用父类初始化函数的。
     76 
     77 调用父类函数有以下方法:
     78 
     79 # -*- coding:utf-8 -*-
     80 class Animal():
     81     def __init__(self, name):
     82         self.name = name
     83  
     84     def saySomething(self):
     85         print("I am " + self.name)
     86  
     87 class Dog(Animal):
     88     def __init__(self, name):
     89         super().__init__(name)
     90  
     91     def saySomething(self):
     92         print ("I am "+ self.name + ", and I can bark")
     93   
     94 
     95  
     96 
     97 1.直接写类名调用: parent_class.parent_attribute(self)
     98 
     99 2.用 super(type, obj).method(arg)方法调用:super(child_class, child_object).parent_attribute(arg)   【不需要写self】
    100 
    101 3.在类定义中调用本类的父类方法,可以直接 super().parent_method(arg)  【个人推崇这种写法】
    102 
    103 样例如下:
    104 
    105 # -*- coding:utf-8 -*-
    106 # file_name: python_class_inheritance_example.py
    107 class Animal():
    108     def __init__(self, name):
    109         self.name = name
    110  
    111     def saySomething(self):
    112         print("I am " + self.name)
    113  
    114 class Dog(Animal):
    115     def __init__(self, name):
    116         super().__init__(name)
    117  
    118     def saySomething(self):
    119         print ("I am "+ self.name + ", and I can bark")
    120  
    121     def animal_say_1(self):
    122         # 子类调用父类的方法
    123         #  方式1
    124         super(Dog, self).saySomething()
    125  
    126     def animal_say_2(self):
    127         #  方式2 [推荐]
    128         super().saySomething()
    129      
    130     def animal_say_3(self):
    131         # 方式3
    132         Animal.saySomething(self)
    133  
    134  
    135 if __name__ == "__main__":
    136     dog = Dog("Blake")
    137     dog.saySomething()
    138     dog.animal_say_1()
    139     dog.animal_say_2()
    140     dog.animal_say_3()
    141     # 子类对象调用被覆盖的父类方法
    142     super(Dog, dog).saySomething()
    143  
    144 '''
    145 输出结果如下:
    146 python python_class_inheritance_example.py
    147 I am Blake, and I can bark
    148 I am Blake
    149 I am Blake
    150 I am Blake
    151 I am Blake
    152 '''
  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/2mei/p/9254173.html
Copyright © 2011-2022 走看看