1 # -*- coding:utf-8 -*-
 2 class Super(object):
 3
 4     def test(self):
 5         self.action()
 6
 7 class Sub(Super):
 8
 9     def action(self):
10         print "sub action"
11
12 obj=Sub()
13 obj.test()

代码中,超类Super中定义了一个函数test。调用了自身的action函数。但是Super中并没有定义action函数。

这是为什么?

----------------------------------

在这个例子中的超类,有时会叫做抽象超类。意思是说,类的部分行为由子类来提供。如果预期的方法没有在子类中有定义,那么会抛出没有定义变量名的异常。

----------------------------------

这就是为什么上面代码的输出是

sub action

-------------------------------------

为了避免子类忘记实现action函数,在Super类中,也可以加上action函数,并使用assert来提示用户必须覆盖这个函数。

代码如下:

class Super(object):def test(self):self.action()def action(self):assert False,"action must be implemented!"

当然,也可以在Super中使用抛出异常的方法来实现这个提示子类覆盖action函数的功能。

代码如下:

class Super(object):def test(self):self.action()def action(self):raise NotImplementedError("action must be implemented!")

Python中的抽象超类相关推荐

  1. python中的抽象含义_Python中下划线的5种含义你都知道吗?

    英文原文:https://dbader.org/blog/meaning-of-underscores-in-python 本文介绍了Python中单下划线和双下划线("dunder&quo ...

  2. python 实例化父类对象_在Python中从现有超类实例化子类

    所以我正在与第三方库进行交互,这会引发例外情况,但它基本上都会引发相同的异常(特别是suds.WebFault.但是,有可能从异常引发的数据中确定异常的确切类型.我希望将这个异常抽象为子类化这种类型的 ...

  3. 利用抽象语法树检查Python中“未定义”的变量名

    其实,Python是一种真正的动态语言,代码中的变量名本没有"声明"或"定义"的说法,语言本身也没有提供声明或定义变量的特殊语法(global除外).对程序员来 ...

  4. Python中超类是如何知道自己被继承的

    在Python中,每个类都有一个特殊方法__init_subclass__(),该方法会在类被继承时自动调用. ----------喜大普奔---------- 1.董付国老师Python系列教材,亚 ...

  5. python叫什么-python中什么叫类

    python中什么叫类? 可以视为种类或者类型的同义词.所有的对象都属于某一个类,称为类的实例. 例如:鸟就是"鸟类"的实例.这就是一个有很多子类的一般(抽象)类:看到的鸟可能属于 ...

  6. python采用面向对象编程模式吗_如何理解 Python 中的面向对象编程?

    现如今面向对象编程的使用非常广泛,本文我们就来探讨一下Python中的面向对象编程. 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 以下为译文: Python支持多种类型的编 ...

  7. python如何初始化对象数组_如何理解Python中的面向对象编程?

    (由Python大本营付费下载自视觉中国) 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 现如今面向对象编程的使用非常广泛,本文 ...

  8. 如何理解 Python 中的面向对象编程?

    现如今面向对象编程的使用非常广泛,本文我们就来探讨一下Python中的面向对象编程. 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews ...

  9. Python中抽象类和接口的区别

    Python中的抽象类和接口有什么区别? #1楼 用更基本的方式来解释:界面有点像空的松饼盘. 它是一个包含一组没有代码的方法定义的类文件. 抽象类是相同的,但并非所有函数都需要为空. 有些人可以有代 ...

  10. [转载] python中的type和object详解

    参考链接: Python object() 这篇主要描述Python的新风格对象(new-style objects),如下: 和分别是什么? 用户自定义的类和实例之间是怎么联系的?它们和内置类型又是 ...

最新文章

  1. golang 写入文件 覆盖旧文件 将旧文件清空
  2. 手风琴html例子,jquery实现简单手风琴菜单效果实例
  3. 计算机应用基础试模块5ACCSE,2015年计算机二级《Access》上机最后冲刺卷(1)
  4. 论文浅尝 - ICLR2022 | OntoProtein:融入基因本体知识的蛋白质预训练
  5. mysql setup w_MySql的安装及配置详细指引!
  6. Windows Forms 实现安全的多线程详解
  7. 瀑布流ListView
  8. 专供PNG免抠设计素材好地方,做设计到搜图114
  9. 注册ActiveX控件 未在此计算机上注册ActiveX控件!!!
  10. mac 键盘失灵_苹果电脑按键失灵怎么办_mac键盘部分按键失灵如何修复-win7之家...
  11. 古风诗词选别名-欢迎留言
  12. C++之类和对象2:消得人憔悴
  13. angular 路由快照和 aggrid 结合后,导致aggrid 表头消失的问题
  14. AtCoder Beginner Contest 211
  15. 数据结构(C语言) 实验---图及其应用
  16. toLua:简洁的使用说明
  17. 从G1到冻酸奶Froyo
  18. 单片机c语言 步进电机,步进电机控制(单片机C语言).doc
  19. SAP License:ERP仓库管理系统怎么用?
  20. weautomate rpa开发心得

热门文章

  1. 深度学习:神经网络neural network
  2. PGM:基于模板的表示
  3. Machine Learning - VII. Regularization规格化 (Week 3)
  4. Android SQL删除表、清空表
  5. Android Service 播放音乐
  6. Android如何实现音频输出路由的切换
  7. c/c++ 多线程 ubuntu18.04 boost编译与运行的坑
  8. VBscript读取excel表,中数据导入到SQLserver数据库里面
  9. Appium解决每次启动时都安装setting和unlock app方法
  10. Web---session技术代码演示(request,session,servletContext)