python 使用abc实现接口类/虚类

具体类

class BaseA:
def run(self):
print('base A running') class ChildA(BaseA):
def run(self):
print('child a') # 具体类可以直接继承也可以实现多态
a = BaseA()
a.run()
a = ChildA()
a.run()

虚类

class BaseB():
@abc.abstractmethod
def run(self):
return NotImplemented def hello(self):
print('hello') # 直接实例化不会会报错
b = BaseB() # 这里没有正确的实现虚类,正确实现看馅饼
b.run()
output: return NotImplemented

纯虚类 也就是接口类

# python2 不是继承ABC,使用 __metaclass__ = ABCMeta

class BaseE(abc.ABC):
@abc.abstractmethod
def run(self):
return NotImplemented
@abc.abstractmethod
def hello(self):
return print('hello') class ChildE1(BaseE):
pass class ChildE2(BaseE):
@abc.abstractmethod
def run(self):
print('e') class ChildE3(BaseE):
def run(self):
print('e') # e = BaseE() 报错
# e = ChildE2() 报错
e = ChildE3()
e.hello()
e.run()

继承虚类后想要改变参数类型怎么办

# 给新的参数一个默认值, 可以满足新的参数的调用
# 这样可以满足原来的参数对函数的调用,不必改变后续代码
class ChildE4(BaseE):
def run(self, new_arg =1):
print(new_arg)

可不可以实现 同一个函数不同的参数列表

class Test():
def run(self):
print('1')
def run(self, temp):
print(temp) t = Test()
# t.run() 报错了
t.run(1)
# 所以python并没有c++里那样的virtual table去根据参数数量,去判断和使用不同的函数

python 使用abc实现接口类/虚类(2.2)的更多相关文章

  1. python 用abc模块构建抽象基类Abstract Base Classes

    见代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/08/01 16:58 from abc import ABCMet ...

  2. Python面向对象 | 抽象类和接口类

    一.抽象类(规范的编程模式) 什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化.抽象类的本质还是类,指的是一组类的相似性,而接口只强调函数属性的相似性. 为什么要有抽象类 ...

  3. C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

    1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...

  4. C#类、接口、虚方法和抽象方法0322

    虚拟方法和抽象方法有什么区别与联系: 1.抽象方法只有声明没有实现代码,需要在子类中实现:虚拟方法有声明和实现代码,并且可以在子类中重写,也可以不重写使用父类的默认实现. 2.抽象类不能被实例化(不可 ...

  5. 简述java接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方法 ...

  6. python之继承、抽象类、新式类和经典类

    一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...

  7. MFC浅析(7) CWnd类虚函数的调用时机、缺省实现

    CWnd类虚函数的调用时机.缺省实现 FMD(http://www.fmdstudio.net) 1. Create 2. PreCreateWindow 3. PreSubclassWindow 4 ...

  8. Python面向对象6:抽象类和自定义类

    抽象类- 抽象方法: 没有具体实现内容的方法成为抽象方法- 抽象方法的主要意义是规范了子类的行为和接口- 抽象类的使用需要借助abc模块 import abc - 抽象类:包含抽象方法的类叫抽象类,通 ...

  9. Java学习笔记_22_Set接口的实现类

    22.Set接口的实现类: Set接口存放的元素是无序的且不包括反复元素. 1>实现类HashSet: HashSet类依据元素的哈希码进行存放,取出时也能够依据哈希码高速找到.HashSet不 ...

随机推荐

  1. Windows API 查看器

    { http://www.dependencywalker.com/ } { Download the latest version here:  Download Version 2.2.6000 ...

  2. Delphi max函数和min函数

    uses单元 math: min函数  min(A,B); 比较A.B的大小,取最小值 max函数  min(A,B); 比较A.B的大小,取最大值 原型示例:function Min(const A ...

  3. bzoj 3207 可持久化线段树+hash

    这道题要看出来这个做法还是比较容易说一下细节 1.因为要用hash的区间值域来建树,而hash为了不冲突要开的很大,所以值域就会比较的大,不过这道题好的一点是没有修改,所以直接离散一下就会小很多 2. ...

  4. SpringBoot整合MongoDB,在多数据源下实现事务回滚。

    项目中用到了MongoDB,准备用来存储业务数据,前提是要实现事务,保证数据一致性,MongoDB从4.0开始支持事务,提供了面向复制集的多文档事务特性.能满足在多个操作,文档,集合,数据库之间的事务 ...

  5. delphi 多线程3

     多线程程序设计 我们知道,win95或winNT都是“多线程”的操作系统,在DELPHI .中,我们可以充分利用这一特性,编写出“多线程”的应用程序. 对以往在DOS或16位windows下写程序的 ...

  6. 笨办法学Python记录--习题37 异常,lambda,yield,转义序列

    习题中提到了raise,查了下,顺便所有异常类关键字罗列如下文章中: 为什么使用异常 错误处理.事件通知.特殊情况处理.退出时的行为.不正常的程序流程. 简单的示例 在没有任何定义x变量的时候: pr ...

  7. mongodb副本集的内部机制(借鉴lanceyan.com)

    针对mongodb的内部机制提出以下几个引导性的问题: 副本集故障转移,主节点是如何选举的?能否手动干涉下架某一台主节点. 官方说副本集数量最好是奇数,为什么? mongodb副本集是如何同步的?如果 ...

  8. (转)4年python,总结一些改善Python程序的建议

    自己写Python也有四五年了,一直是用自己的"强迫症"在维持自己代码的质量.都有去看Google的Python代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学pythp ...

  9. 18、webservice使用

    1.将axis2.war文件拷到tomcat,webapp文件夹下,然后重启tomcat 访问

  10. 如何解决Unsupported major.minor version 52.0问题?

    为什么出现Unsupported major.minor version 52.0? You get this error because a Java 7 VM tries to load a cl ...