python 使用abc实现接口类/虚类(2.2)
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)的更多相关文章
- python 用abc模块构建抽象基类Abstract Base Classes
见代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/08/01 16:58 from abc import ABCMet ...
- Python面向对象 | 抽象类和接口类
一.抽象类(规范的编程模式) 什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化.抽象类的本质还是类,指的是一组类的相似性,而接口只强调函数属性的相似性. 为什么要有抽象类 ...
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...
- C#类、接口、虚方法和抽象方法0322
虚拟方法和抽象方法有什么区别与联系: 1.抽象方法只有声明没有实现代码,需要在子类中实现:虚拟方法有声明和实现代码,并且可以在子类中重写,也可以不重写使用父类的默认实现. 2.抽象类不能被实例化(不可 ...
- 简述java接口和C++虚类的相同和不同之处
C++虚类相当于java中的抽象类,与接口的不同处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方法 ...
- python之继承、抽象类、新式类和经典类
一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...
- MFC浅析(7) CWnd类虚函数的调用时机、缺省实现
CWnd类虚函数的调用时机.缺省实现 FMD(http://www.fmdstudio.net) 1. Create 2. PreCreateWindow 3. PreSubclassWindow 4 ...
- Python面向对象6:抽象类和自定义类
抽象类- 抽象方法: 没有具体实现内容的方法成为抽象方法- 抽象方法的主要意义是规范了子类的行为和接口- 抽象类的使用需要借助abc模块 import abc - 抽象类:包含抽象方法的类叫抽象类,通 ...
- Java学习笔记_22_Set接口的实现类
22.Set接口的实现类: Set接口存放的元素是无序的且不包括反复元素. 1>实现类HashSet: HashSet类依据元素的哈希码进行存放,取出时也能够依据哈希码高速找到.HashSet不 ...
随机推荐
- OpenGL Download
{ https://www.opengl.org/ }
- 一场comet常规赛的台前幕后
有出题的想法大概是#8比完之后,#8的比赛较易,应该是符合https://info.cometoj.com 上的常规赛难度说明. 我们几个觉得我们一定可以出质量更高的题. 那个时候在玩线段树的时碰巧想 ...
- java 后台 实现简单的验证码
private int width =80;private int height=30;private Random r=new Random();private String fontnames[] ...
- spring aop的前奏,动态代理 (5)
目录 一.先看一个计算器的抽取和实现 二.使用动态代理解决以上问题. 1 设计原理 2 代码实现 2.1 接口代码 2.2 实现接口的代码 2.3 测试代码 2.3 创建动态代理类 2.4 动态代理类 ...
- 百度API获取位置范围内的周边服务
百度地图API是一套为开发者免费提供的基于百度地图的应用程序接口,包括JavaScript.iOS.Andriod.静态地图.Web服务等多种版本,提供基本地图.位置搜索.周边搜索.... <s ...
- WIN7下怎么安装iis教程
点击开始→控制面板,然后再点击程序,勿点击卸载程序,否则到不了目标系统界面. 2 然后在程序和功能下面,点击打开和关闭windows功能. 3 进入Windows功能窗口,然后看到internet信息 ...
- 浏览器获取自定义响应头response-headers
原创作品版权归属本人所有,违者必究 https://blog.csdn.net/qq_37025445/article/details/82888731想在浏览器获取响应头里面自定义的响应头:file ...
- spring 中 isolation 和 propagation 详解
可以在XML文件中进行配置,下面的代码是个示意代码 <tx:advice id="txAdvice" transaction-manager="txManager& ...
- 前端(二十)—— vue介绍:引用vue、vue实例、实例生命周期钩子
vue 一.认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方便构建单页面应用程序(SPA) 3.数据驱动 =&g ...
- python3 可变数据类型和不可变数据类型
python内置有6种对象类型: Number 数值型 int 整型 不可变 float 浮点型 不可变 complex 复数 不可变 String 字符串 不可变 Tuple 元组 不可变 ...