ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

接口与继承(三十)

2019-03-02 09:38:00  阅读:230  来源: 互联网

标签:__ load 继承 self 接口 print 三十 class def


 

import abc

class AllFile(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def read(self):
        pass
    # 父类定义抽象的方法,子类必须实现
    @abc.abstractmethod
    def write(self):
        pass

class Txt(AllFile):
    def read(self):
        print("txt read")
    def write(self):
        print("txt write")

class Mem(AllFile):
    def read(self):
        print("mem read")
    def write(self):
        print("mem write")

m = Mem()
m.read()
m.write()

 

继承顺序:

Java ,C#只能继承一个类,Python可以继承多个类

class A:
    def test(self):
        print("this is A")

class B(A):
    # def test(self):
    #     print("this is B")
    pass

class D(B):
    # def test(self):
    #     print("this is D")
    pass

class C(A):
    # def test(self):
    #     print("this is C")
    pass

class E(C):
    # def test(self):
    #     print("this is E")
    pass

class F(D,E):
    # def test(self):
    #     print("this is F")
    pass

print(F.__mro__)
'''
F.__mro__ 揭秘了F的继承顺序
(<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, 
<class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
'''
f = F()
f.test() # F-->D-->B-->E-->C-->A

Python会计算一个方法解析顺序(MRO) 列表,这个列表就是一个简单的所有基类的线性顺序表

注意:Python2 与Python3 中的继承顺序是不一样的

 

子类中调用父类的方法

class Vehicle:
    Country = "China"
    def __init__(self,name,speed,load,power):
        self.Name = name
        self.Speed = speed
        self.Load = load
        self.Power = power

    def run(self):
        print("running...")

class Subway(Vehicle):
    def __init__(self,name,speed,load,power,line):
        Vehicle.__init__(self,name,speed,load,power)
        self.Line = line

    def show_info(self):
        print("%s %d号线" %(self.Name,self.Line))

    def run(self):
        Vehicle.run(self)
        print("%s %d号线,以%s的速度在运行" %(self.Name,self.Line,self.Speed))

line3 = Subway("深圳地铁","100km/s",10000,"电",3)
line3.show_info()
line3.run()
'''
深圳地铁 3号线
running...
深圳地铁 3号线,以100km/s的速度在运行
'''

 

super调用父类的方法

class Vehicle:
    Country = "China"
    def __init__(self,name,speed,load,power):
        self.Name = name
        self.Speed = speed
        self.Load = load
        self.Power = power

    def run(self):
        print("running...")

class Subway(Vehicle):
    def __init__(self,name,speed,load,power,line):
        # Vehicle.__init__(self,name,speed,load,power)
        super().__init__(name,speed,load,power)
        self.Line = line

    def show_info(self):
        print("%s %d号线" %(self.Name,self.Line))

    def run(self):
        # Vehicle.run(self)
        super().run()
        print("%s %d号线,以%s的速度在运行" %(self.Name,self.Line,self.Speed))

line3 = Subway("深圳地铁","100km/s",10000,"电",3)
line3.show_info()
line3.run()
'''
深圳地铁 3号线
running...
深圳地铁 3号线,以100km/s的速度在运行
'''

 

标签:__,load,继承,self,接口,print,三十,class,def
来源: https://www.cnblogs.com/xiangtingshen/p/10459741.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有