C++ 可以经由过程纯虚函数或设构造函数为 protected 来避免接口被实例化,Java 就更不消说了,接口就是接口,有完全的语法支撑。
你也无法强迫子类必须实现“接口”中定义的每一个办法,C++ 的纯虚函数可以强迫这一点(Java 更不必说)。
就算子类「自认为」实现了“接口”中的办法,也不克不及包管办法的名字没有写错,C++ 的 override 关键字可以包管这一点(Java 更不必说)。
静态类型的缺掉,让 Python 很难实现 C++ / Java 那样严格的多态检查机制。所以面向接口的编程,对 Python 来说,更多的要依附法度榜样员的素养。
回到 Shape 的例子,模仿 asyncio,我们把“接口”改成如许:
- class AbstractShape:
- def area(self):
- raise NotImplementedError
如许,它才更像一个接口。
super
有时刻,须要在子类中调用父类的办法。
比如图形都有色彩这个属性,所以不妨加一个参数 color 到 __init__:
- class AbstractShape:
- def __init__(self, color):
- self.color = color
那么子类的 __init__() 势必也要跟着修改:
- class Circle(AbstractShape):
- def __init__(self, color, r=0.0):
- super().__init__(color)
- self.r = r
经由过程 super 把 color 传给父类的 __init__()。其实不消 super 也行:
- class Circle(AbstractShape):
- def __init__(self, color, r=0.0):
- AbstractShape.__init__(self, color)
- self.r = r
然则 super 是推荐的做法,因为它避免了硬编码,也能处理多持续的情况。
【编辑推荐】
- 大年夜零开端教你用Python做词云
- 技巧 | 应用Python来进修数据科学的完全教程
- 手把手教你用 Python 和 Scikit-Learn 实现垃圾邮件过滤
- 若何用Python履行常见的Excel和SQL义务
- 【干货】Python主动化审计及实现
推荐阅读
在这个语法树构造中,body里包含着if构造中的语句return HttpResponse("2"),type为Compare表示该构造体为断定语句,left表示左值即源码中的type,test构造体中则是用来进行if断定,test中的ops对应着>>>详细阅读
本文标题:浅析Python的类、继承和多态
地址:http://www.17bianji.com/lsqh/36335.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示