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. Shiro 五张表

    参考博客: http://blog.csdn.net/frankcheng5143/article/details/50836619 Filter:运行过程中改变进入资源的请求和资源返回的响应中的有效 ...

  2. c# 未能加载文件或程序集

    最近做项目时碰到这个问题了,goole.百度了半天,整理了以下几种可能: DLL文件名与加载时的DLL文件名不一致, DLL文件根本不存在,即出现丢失情况, 加载DLL路径错误,即DLL文件存在,但加 ...

  3. ASCII、Unicode和UTF-8

    转自廖雪峰的官方网站:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138 ...

  4. Java并发编程:Java Thread方法join的简单总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  5. 本地计算机上的OracleDBConsoleorcl服务启动后停止

    emca -repos dropemca -repos createemca -config dbcontrol db 这三步你都运行成功了也没有报错?最后没有提示你dbcontrol已经启动了么?, ...

  6. Java课程作业之动手动脑(二)

    纯随机数发生器 编写一个方法,使用以下算法生成指定数目(比如1000个)的随机整数. import java.util.Scanner; public class test { public stat ...

  7. mybatis关系映射之一对多和多对一

    本实例使用用户(User)和博客(Post)的例子做说明: 一个用户可以有多个博客, 一个博客只对应一个用户 一. 例子(本实体采用maven构建): 1. 代码结构图: 2. 数据库: t_user ...

  8. 下载,和scp上传问题

    下载,和scp上传问题 wget http://download.openx.org/openx-2.8.10.zip  [默认当前目录] scp ldm@192.168.1.150:/var/www ...

  9. Your password has expired. To log in you must change it using a client that supports expired passwords.

    [Lk] ERROR [11-26 23:01:51] [main] net.jweb.listener.AppInitializerListener.contextInitialized(231) ...

  10. zookeeper超时:Unable to connect to zookeeper server within timeout: 5000

    解决措施: 1:检查 提供方和消费方的address是否正确 <dubbo:application name="dubboxdemo-servive"/> <du ...