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 '''
  • 相关阅读:
    ReentrantLock的实现语义与使用场景
    队列同步器详解
    设计模式--模板方法模式
    Synchronized及其实现原理
    JAVA线程基础
    JAVA内存模型
    java 线上问题定位工具
    JMX超详细解读
    Hexo
    [转]html5 video在安卓大部分浏览器包括微信最顶层的问题
  • 原文地址:https://www.cnblogs.com/2mei/p/9254173.html
Copyright © 2011-2022 走看看