VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python基础(24):面向对象三大特性一(继承)(5)

  •  
  • jinchengwenjian=Process()
  •  
  • #这样大家都是被归一化了,也就是一切皆文件的思想
  • wenbenwenjian.read()
  • yingpanwenjian.write()
  • jinchengwenjian.read()
  •  
  • print(wenbenwenjian.all_type)
  • print(yingpanwenjian.all_type)
  • print(jinchengwenjian.all_type)
  • 1.5.3 抽象类与接口类

    抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。

    抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计。 

    在python中,并没有接口类这种东西,即便不通过专门的模块定义接口,我们也应该有一些基本的概念。

    1.多继承问题

    在继承抽象类的过程中,我们应该尽量避免多继承; 而在继承接口的时候,我们反而鼓励你来多继承接口。

    接口隔离原则:

    使用多个专门的接口,而不使用单一的总接口。即客户端不应该依赖那些不需要的接口。

    2.方法的实现

    在抽象类中,我们可以对一些抽象方法做出基础实现; 而在接口类中,任何方法都只是一种规范,具体的功能需要子类实现。

    1.6 继承顺序和原理

    1.6.1 继承顺序

    
    
    1. class A(object):
    2. def test(self):
    3. print('from A')
    4.  
    5. class B(A):
    6. def test(self):
    7. print('from B')
    8.  
    9. class C(A):
    10. def test(self):
    11. print('from C')
    12.  
    13. class D(B):
    14. def test(self):
    15. print('from D')
    16.  
    17. class E(C):
    18. def test(self):
    19. print('from E')
    20.  
    21. class F(D,E):
    22. # def test(self):
    23. # print('from F')
    24. pass
    25. f1=F()
    26. f1.test()
    27. print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性
    28.  
    29. #新式类继承顺序:F->D->B->E->C->A
    30. #经典类继承顺序:F->D->B->A->E->C
    31. #python3中统一都是新式类
    32. #pyhon2中才分新式类与经典类

    1.6.2 继承原理

    python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表,例如:

    
    
    1. >>> F.mro() #等同于F.__mro__
    2. [<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

    为了实现继承,python会在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止。 而这个MRO列表的构造是通过一个C3线性化算法来实现的。我们不去深究这个算法的数学原理,它实际上就是合并所有父类的MRO列表并遵循如下三条准则: 1.子类会先于父类被检查。 2.多个父类会根据它们在列表中的顺序被检查。 3.如果对下一个类存在两个合法的选择,选择第一个父类。

    
    相关教程
              
    关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号