zoukankan      html  css  js  c++  java
  • 【Python学习之旅】---继承(类的相关知识)

    #面向对象编程三大特性:集成、多态,封装
    class Dad:
    money=10
    def __init__(self,name):
    self.name=name

    def da(self):
    print('%s正在打儿子' %self.name)

    class Son(Dad): #继承父辈,单继承
    pass

    print(Son.money) #可调用父类数据属性
    s1=Son('陈宇霞')
    print(s1.name)


    #当类之间有很多相同属性,提取这些共同的功能做成基类,用继承
    #当类之间有显著的不同,并且较小的类是较大的类所需的组件时,用组合

    #接口继承:接口是一个函数,定义一个基类,把自己的方法定义成接口函数,如果有子类继承接口函数
    #子类中必须实现接口函数中的方法功能
    import abc
    class All(metaclass=abc.ABCMeta):
    @abc.abstractmethod #防止子类在未定义接口函数中的方法的时候,依旧能调用基类
    def read(self):
    pass #接口类可不实现内部逻辑,只是用来规范子类
    def write(self):
    pass

    class Disk(All):
    def read(self):
    print('read disk')
    def write(self):
    print('write disk')

    class Cdrom(All):
    def read(self):
    print('read cdrom')
    def write(self):
    pass

    c1=Cdrom()

    #类的继承分两种方式:经典式:深度优先。新式类:广式优先
    #深度优先:F-->D-->B-->A 广式优先:F-->E-->C-->A 优先从左边开始找

    class A:
    # def test(self):
    # print('A')
    pass
    class B(A):
    # def test(self):
    # print('B')

    pass
    class C(A):
    # def test(self):
    # print('C')
    pass

    class D(B):
    # def test(self):
    # print('D')
    pass

    class E(C):
    # def test(self):
    # print('E')
    pass

    class F(D,E):
    # def test(self):
    # print('F')
    pass
    f1=F()
    # f1.test() #经典类:F->D->B->A-->E-->C

    print(F.__mro__)

    #F-->D->B-->E--->C--->A新式类
    #注意:对于你定义的类,Python会计算出一个方法解析顺序(MRO)列表,这个列表就是一个简单的所有基类的线性顺序列表
    #必须遵循以下原则:
    #1.子类会优先于父类被检查
    #2.多个父类会基于他们在列表中的顺序被检查
    #3.如果对下一个类存在两个合法的选择,选择第一个类


    #spuer调用父类的方法
    class Jiaotong():
    def __init__(self,name,load):
    self.name=name
    self.load=load
    def run(self):
    print('发车啦')

    class Subway(Jiaotong):
    def __init__(self,name,load,line):
    super().__init__(name,load) #super方法直接调用父类的init函数,可不用写父类名和self
    self.line=line
    print(self.name,self.load,self.line)

    def run(self):
    super().run() #super方法直接调用父类的run函数,可不用写父类名和self

    s1=Subway('深圳地铁',1000,'1号线')
    s1.run()

    #执行结果:

       深圳地铁 1000 1号线
       发车啦

     
     

     

     

  • 相关阅读:
    <!内容//>请问在CSS里面,这个符号是什么 意思?
    java.sql.Timestamp;
    struts做开发的时候action是继承Action方法还是ActionSupport方法
    @Autowired的用法和作用
    JavaScript方法和技巧大全
    Spring@Autowired注解与自动装配
    关于Class File Editor Source not found
    程序员:各种快捷键的用法及掌握 .
    Struts2的Preparable接口 .
    测试
  • 原文地址:https://www.cnblogs.com/chenyuxia/p/12125379.html
Copyright © 2011-2022 走看看