Fay

继承

继承

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

新建的类可以继承一个或多个父类(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

posted on 2018-09-27 21:38  sunny7  阅读(99)  评论(0编辑  收藏  举报

导航