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
    
  • 相关阅读:
    Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
    无向图求点割集的算法
    hdu 2121无根最小树形图要建一个虚拟节点
    hdu 1576扩展欧几里得算法
    欧几里德算法的扩展-求解不定方程
    hdu 3072 强连通+缩点+最小树形图思想
    1352 集合计数 扩展欧几里德算法
    1247 可能的路径 逆向思维
    Atcoder B
    C. Timofey and a tree 观察题 + dfs模拟
  • 原文地址:https://www.cnblogs.com/sunny7/p/9715803.html
Copyright © 2011-2022 走看看