作家
登录

浅析Python的类、继承和多态

作者: 来源: 2017-07-21 10:33:21 阅读 我要评论

  •  
  • except NotImplementedError: 
  •  
  • pass  
  • C++ 可以经由过程纯虚函数或设构造函数为 protected 来避免接口被实例化,Java 就更不消说了,接口就是接口,有完全的语法支撑。

    你也无法强迫子类必须实现“接口”中定义的每一个办法,C++ 的纯虚函数可以强迫这一点(Java 更不必说)。

    就算子类「自认为」实现了“接口”中的办法,也不克不及包管办法的名字没有写错,C++ 的 override 关键字可以包管这一点(Java 更不必说)。

    静态类型的缺掉,让 Python 很难实现 C++ / Java 那样严格的多态检查机制。所以面向接口的编程,对 Python 来说,更多的要依附法度榜样员的素养。

    回到 Shape 的例子,模仿 asyncio,我们把“接口”改成如许:

    1. class AbstractShape: 
    2.  
    3. def area(self): 
    4.  
    5. raise NotImplementedError  

    如许,它才更像一个接口。

    super

    有时刻,须要在子类中调用父类的办法。

    比如图形都有色彩这个属性,所以不妨加一个参数 color 到 __init__:

    1. class AbstractShape: 
    2.  
    3. def __init__(self, color): 
    4.  
    5. self.color = color  

    那么子类的 __init__() 势必也要跟着修改:

    1. class Circle(AbstractShape): 
    2.  
    3. def __init__(self, color, r=0.0): 
    4.  
    5. super().__init__(color) 
    6.  
    7. self.r = r  

    经由过程 super 把 color 传给父类的 __init__()。其实不消 super 也行:

    1. class Circle(AbstractShape): 
    2.  
    3. def __init__(self, color, r=0.0): 
    4.  
    5. AbstractShape.__init__(self, color) 
    6.  
    7. self.r = r  

    然则 super 是推荐的做法,因为它避免了硬编码,也能处理多持续的情况。

    【编辑推荐】

    1. 大年夜零开端教你用Python做词云
    2. 技巧 | 应用Python来进修数据科学的完全教程
    3. 手把手教你用 Python 和 Scikit-Learn 实现垃圾邮件过滤
    4. 若何用Python履行常见的Excel和SQL义务
    5. 【干货】Python主动化审计及实现
    【义务编辑:枯木 TEL:(010)68476606】

      推荐阅读

      【干货】Python自动化审计及实现

    在这个语法树构造中,body里包含着if构造中的语句return HttpResponse("2"),type为Compare表示该构造体为断定语句,left表示左值即源码中的type,test构造体中则是用来进行if断定,test中的ops对应着>>>详细阅读


    本文标题:浅析Python的类、继承和多态

    地址:http://www.17bianji.com/lsqh/36335.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)