作家
登录

浅析Python的类、继承和多态

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

  1. class Point: 
  2.  
  3. def __str__(self): 
  4.  
  5. return '({}, {})'.format(self.__x, self.__y)  
  1. class Circle(Shape): 
  2.  
  3. pass  

那么它将持续父类 Shape 的 area:


  1. >>> Shape.area is Circle.area 
  2.  
  3. True  

一旦 Circle 定义了本身的 area,大年夜 Shape 持续而来的那个 area 就被重写(overwrite)了:

用法比较直接:

举一个教科书中最常见的例子。Circle 和 Rectangle 持续自 Shape,不合的图形,面积(area)计算方法不合。

  1. >>> from shape import * 
  2.  
  3. >>> Shape.area is Circle.area 
  4.  
  5. False  

经由过程类的字典更能明显地看清这一点:

所以,子类重写父类的办法,其实只是把雷同的属性名绑定到了不合的函数对象。可见 Python 是没有覆写(override)的概念的。

同理,即使 Shape 没有定义 area 也是可以的,Shape 作为“接口”,并不克不及获得语法的包管。

甚至可以动态的添加办法:

  1. class Circle(Shape): 
  2.  
  3. ... 
  4.  
  5. # def area(self): 
  6.  
  7. return math.pi * self.r * self.r 
  8.  
  9. # 为 Circle 添加 area 办法。 
  10.  
  11. Circle.area = lambda self: math.pi * self.r * self.r  

动态说话一般都是这么灵活,Python 也不例外。

Python 官方教程「9. Classes」第一句就是:

Python 以起码的新的语法和语义实现潦攀类机制,这一点确切让人赞叹,然则也让 C++ / Java 法度榜样员认为颇为不适。

不难看出,交互模式在打印 p 时其实是调用了 repr(p):

多态

如前所述,Python 没有覆写(override)的概念。严格来讲,Python 并不支撑「多态」。

为懂得决持续构造中接口和实现的问题,或者说为了更好的用 Python 面向接口编程(设计模式所倡导的),我们须要工资的设一些规范。

  1. >>> Shape.__dict__['area'
  2.  
  3. <function Shape.area at 0x0000000001FDB9D8> 
  4.  
  5. >>> Circle.__dict__['area'
  6.  
  7. <function Circle.area at 0x0000000001FDBB70>  

以内建模块 asyncio 为例,AbstractEventLoop 原则上是一个接口,类似于 Java 中的接口或 C++ 中的纯虚类,然则 Python 并没有语法去包管这一点,为了尽量表现 AbstractEventLoop 是一个接口,起首在名字上标记它是抽象的(Abstract),然后让每个办法都抛出异常 NotImplementedError。

  1. class AbstractEventLoop: 
  2.  
  3. def run_forever(self): 
  4.  
  5. raise NotImplementedError 
  6.  
  7. ...  
  1. loop = asyncio.AbstractEventLoop() 
  2.  
  3. try: 
  4.  
  5. loop.run_forever() 

      推荐阅读

      【干货】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)