1.抽象方法的概念

之前我们定义一个基类的时候,如果要求子类必须重写父类中的某一个方法,可以这样做:

定义一个名为Pizza的基类,让其get_radius方法必须被子类继承

class Pizza(object):
@staticmethod
def get_radius():
raise NotImplementedError

如果子类没有重写该方法就会触发错误

class Sub_Pizza(Pizza):
pass
Sub_Pizza().get_radius() 错误信息如下:
raise NotImplementedError
NotImplementedError

但是上述方法的缺点是:如果只实例化了子类,而没有调用方法,NotImplementedError就不会被触发;

抽象方法允许我们在类实例化的同时,通过触发异常来告诉我们那些父类中的方法是必须在子类中重写的,而不需要调用方法才可以知道哪些方法是必须要被重写的;

2.抽象方法的实现

抽象方法的实现使用abc模块实现

定义基类,并指定其中的抽象方法(必须在子类中被重写)

import abc

class BasePizza(object):
__metaclass__ = abc.ABCMeta @abc.abstractmethod
def get_radius(self):
"""Return the ingredient list"""

定义子类继承上述类:

class DietPizza(BasePizza):
pass
DietPizza() 执行结果:
TypeError: Can't instantiate abstract class DietPizza with abstract methods get_radius

由于在子类中没有重写方法get_radius,在实例化子类的时候,报TypeError;

正确代码如下:

class DietPizza(BasePizza):

    @staticmethod
def get_radius(self):
return None
DietPizza()

python抽象方法的更多相关文章

  1. [python]抽象方法

    抽象方法 我的理解抽象方法就是:父类的一个方法,继承的所有子类都必须要实现这个方法,否则报错. 举例说明 class Base(object): def _method(self): raise No ...

  2. ARTS-S python抽象方法抽象类

    # coding: utf-8 from abc import ABC, abstractmethod class AbstractClassExample(ABC): def __init__(se ...

  3. Tornado抽象方法抽象类

    #!/usr/bin/env python #抽象方法抽象类 import abc class Foo(metaclass=abc.ABCMeta): def f1(self): raise Exce ...

  4. python抽象类+抽象方法实现接口(interface)

    #python没有类似于java和C#的接口类(interface),需要使用抽象类 和抽象方法来实现接口功能 #!/usr/bin/env python#_*_ coding:utf-8 _*_ f ...

  5. 第四百一十二节,python接口,抽象方法抽象类

    Python接口 在Python中所谓的接口,有两种,一种是通过url访问的api接口 一种是一个对象的接口 构造接口 class Ijiekou: """ 定义一个约束 ...

  6. 关于如何在Python中使用静态、类或抽象方法的权威指南

    Python中方法的工作方式 方法是存储在类属性中的函数,你可以用下面这种方式声明和访问一个函数 >>> class Pizza(object): ... def __init__( ...

  7. python中的抽象方法

    python中的抽象方法 父类要限制1.子类必须有父类的方法2.子类实现的方法必须跟父类的方法的名字一样 import abc class A(metaclass=abc.ABCMeta): @abc ...

  8. Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法

    类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...

  9. python 抽象类、抽象方法、接口、依赖注入、SOLIP

    1.程序设计原则:SOLIP SOLIP设计原则 1.单一责任原则(SRP) 一个对象对只应该为一个元素负责 2.开放封闭原则(OCP) 对扩展开放,修改封闭 3.里氏替换原则(LSP) 可以使用任何 ...

随机推荐

  1. centos7安装zookeeper3.4.12集群

    zookeeper的三要素: 1.一致,能够保证数据的一致性 2.有头,始终有一个leader,node/2+1个节点有效,就能正常工作 3.数据树,树状结构且每个树必须有数据 1. 环境准备 操作系 ...

  2. babel-polyfill

    babel-polyfill Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator.Generator.Set.Maps.Proxy.Reflec ...

  3. 在windows server 2012/2016上,任务管理器性能页面增加磁盘监控的办法

    从windows server 2012开始,微软修改了任务管理器的显示方式,图像化看起来更直观了,但是可惜的是,默认情况下,2012和2016均只显示CPU/内存/网络三个资源监视,没有重要的磁盘, ...

  4. openStack cpu绑定

    来自:http://fishcried.com/2015-01-09/cpu_bindings/ 前一篇理解cpu topology对CPU Topology进行了学习总结,这里想总结下OpenSta ...

  5. 47.纯 CSS 创作一个蝴蝶标本展示框

    html,body{ margin:; padding:; } body{ height: 100vh; display: flex; justify-content: center; align-i ...

  6. 转:ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)

    对于非地理专业的开发人员,对与这些生涩的概念,我们不一定都要了解,但是我们要理解,凡是以经纬度为单位的都是地理坐标系,因为它归根结底是一个椭球体,只不过各个国家为了反映该国家所在区域地球的真实形状,而 ...

  7. JavaScript进行简单的随即验证码生成(适合和我一样刚入门一本完整的教材书都没看完的弟弟)

    (感谢橙旭园给我打开了前端世界的大门) var checkcode = document.getElementById("code"); var btn = document.ge ...

  8. 2. instr用法

    跟oracle中的instr用法一样: SQL> select count(*) from t where instr(title,‟oracle‟)>0; COUNT(*) ———- 5 ...

  9. [Writeup]奇怪的单点音

    [Writeup]奇怪的单点音 单点音韵律,感觉法继续 看题 一个wav文件,没啥好说的 听了一下,类似鸟叫的电子音,后面插了不规律的三次嘟嘟声 先排除摩斯电码吧(唯一知道的东西(σ゚∀゚)σ) 解法 ...

  10. Android Studio 3.0 新特性

    最新Android Studio版本是Android Studio 3.0,本文提供了所有新功能和更改的摘要. 所有这些功能都可以在最新的金丝雀版本中发布,但beta测试版本可能尚未提供. 核心IDE ...