zoukankan      html  css  js  c++  java
  • 继承

    继承

    继承:类与类的关系,一种创建新类的方式

    新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。

    查看继承关系:bases __base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类

    查看继承顺序:类名.mro

    初步认识继承:

    class Class1: #定义父类
        pass
    
    class Class2: #定义父类
        pass
    
    class SubClass1(Class1): #单继承,基类是Class1,派生类是SubClass
        pass
    
    class SubClass2(Class1,Class2): #python支持多继承,用逗号分隔开多个继承的类
        pass
    
    
    

    实例1:

    class Foo:
        def __init__(self,name,sex):
            self.name = name
            self.sex = sex
    
        def a(self):
            print('尴尬')
     class Bar(Foo):
        def b(self):
            print('不尴尬')
    c = Foo('alex','hh')
    c.a()                       
    

    子类中调用父类的方法:

    方法一:指名道姓,即父类名.父类方法()

    class Vehicle:
        Country = 'China'
        def init(self,name,speed):
            self.name = name
            self.speed = speed
    	def run(self):
        	print('开动啦')
        	
    class Subway(Vehicle):
        def init(self,name,speed,line):
            self.line = line
            Vehicle.init(self,name,speed,) #调用父类的方法,直接父类名点父类的方法,这里要加self注意!!!
    
    line13 = Subway('中国地铁','1000人/箱','电')
    
    line13.run() #返回;开动啦
    

    方法二:super()

    class Vehicle1:
        def init(self,name,speed):
            self.name = name
            self.speed = speed
    def run1(self):
        print('开动啦1!!!!')
        
    class Subway1(Vehicle1):
        def init(self,name,speed,line):
            super().init(name,speed) #这里没有self
            self.line = line
    line1 = Subway1('中国地铁','1000人/箱','电')
    line1.run1() #返回;开动啦
    

    继承查找属性,或者叫继承顺序

    python2有经典类,新式类,py2是继承obiect 深度优先

    python3只有新式类,广度优先

    class Foo:
        def f1(self):
            print('Foo.f1')
    
        def f2(self):
            print('Foo.f2')
            self.f1()
    
    class Bar1(Foo):
        def f1(self):
            print('bar.f1')
    b=Bar1()
    b.f2()
    总结:查找原则,是先在总结的实例中找-->然后去实例的类中找-->然后再去父类中找...直到最顶级的父类。
    

    实例2:

    class A:
        def test(self):
            print('aaa')
    
    class B(A):
        def test(self):
            print('bbb')
    
    class C(A):
        def test(self):
            print('ccc')
    
    class D(B):
        def test(self):
            print('新式类广度优先')
    
    class E(C):
        def test(self):
            print('eee')
    
    class F(D,E):
        pass
        # def test(self):
        #     print('fff')
    x = F()
    x.test()
    
    python3只有新式类,执行顺序是: F ,D  ,B ,  E, C, A
    
    python2,分新式类,经典类  执行顺序是: F, D, B, A, E, C
    
  • 相关阅读:
    mysql索引
    springboot mybatis 后台框架平台 shiro 权限 集成代码生成器
    java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    activiti工作流的web流程设计器整合视频教程 SSM和独立部署
    .Net Core中的ObjectPool
    文件操作、流相关类梳理
    .Net Core中的配置文件源码解析
    .Net Core中依赖注入服务使用总结
    消息中间件RabbitMQ(一)
  • 原文地址:https://www.cnblogs.com/sunny7/p/9715803.html
Copyright © 2011-2022 走看看