1. 类的约束
方案一:抛出异常,子类必须重写父类方法,否则会报错
class Base:
def login(self): #强制xxx做XXX事
raise NotImplementedError("子类没有实现该方法") #报错 异常
class Normal( Base):
def login(self):
print("普通人登录")
class Admin( Base):
def login(self):
print("管理员登录")
class Member( Base):
def denglu(self): #方法的覆盖和重写
print("会员登录") def login(obj):
obj.login() n=Normal()
login(n) a=Admin()
login(a) m=Member() #报错
login(m)
在执行到login(m)的时候程序会报错. 原因是, 此时访问的login()是父类中的方法. 但是父
类中的方法会抛出一个异常. 所以报错. 这样程序员就不得不写login方法了. 从而对子类进行
了相应的约束,这是一套方案.
抽象的概念:如果一个类中包含抽象方法. 那么这个类一定是一个抽象类. 抽象类是不能有实例的,但是抽象类中是可以有普通方法的
方案二:使用元类来描述父类. 在元类中给出一个抽象方法. 这样子类就不得不给出抽象
方法的具体实现. 也可以起到约束的效果.
from abc import ABCMeta,abstractmethod class Animal(metaclass=ABCMeta): #类中包含抽象方法,此类就是抽象类,zhu:抽象类可以有普通方法
@abstractmethod
def chi(self): #抽象的概念
pass class Cat(Animal): #子类必须实现父类的方法,否则子类也是抽象类
def chi(self): #子类对抽象概念的实现,重写
print("用犬齿吃")
c=Cat()
c.chi() a=Animal() #报错,报错的原因自己给出
a.chi()
    语法:
from abc import ABCMeta, abstractmethod class Base(metaclass = ABCMeta): 抽象类 @abstractmethod
def 方法(self):pass class Foo(Base): 子类必须重写父类中的抽象方法
def 方法(self):
pass
一个类包含类抽象方法. 这个类一定是抽象类
抽象类中可以有正常的方法 抽象类中如果有抽象方法. 这个类将不能创建对象 接口: 类中都是抽象方法

总结:其实就是父类对子类的约束,子类必须实现XX方法,有两个方案
方案一:使用抽象类和抽象方法,使用频率较低
方案二:使用人为的跑出异常,并尽量使用NotImplementedError,这样比较专业,明确


2. 异常处理
1. 异常:程序运行中的出现的错误
例:
def chu(a, b)
return a/b
ret = chu(10,0) #报错了,除数不能为0
print(ret) 异常的处理:
def chu(a,b)
return a/b
try:
ret=chu(a,b)
print(ret)
except Exception as e:
print("除数不能为0")
  2 .语法:
try:
"""操作"""
except Exception as e:
"""异常的父类,可以捕捉所有的异常"""
else:
"""保护不抛出异常的代码,当try中无异常的时候运行"""
finallly:
最后总要执行我
程序先执行操作, 然后如果出错了会走except中的代码. 如果不出错, 执行else中
的代码. 不论处不出错. 最后都要执行finally中的语句. 一般我们用try...except就够了. 顶多
加上finally. finally一般用来作为收尾工作. 3.自定义异常
例.#继承了Exception就是一个有异常类 import traceack #引入traceback 为了获得堆栈信息
class GenderException(Exception):
pass class Person:
def __init__(self,name,gender):
self.name=name
self.gender=gender def bush(self):
if self.gender!="男":
raise GenderException("性别不对") #除了名字一以外都是父类中的Exception
else:
print("欢迎洗大唧唧")
try:
p1=Person("吴奇隆","男")
p1.bush() p2=Person("小三","女")
p2.bush()
except GenderException as e:
val=traceback.format_exc() #获取到堆栈信息
print(val) #测试的时候打印堆栈信息,给客户的时候就撤掉
print("没吊不要进来")
except Exception as e:
print("其他错误")
#附一个,老师的实例,比较鲜明
#一切皆文件
import abc #利用abc模块实现抽象类 class All_file(metaclass=abc.ABCMeta):
all_type='file'
@abc.abstractmethod #定义抽象方法,无需实现功能
def read(self):
'子类必须定义读功能'
pass @abc.abstractmethod #定义抽象方法,无需实现功能
def write(self):
'子类必须定义写功能'
pass # class Txt(All_file):
# pass
#
# t1=Txt() #报错,子类没有定义抽象方法 class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('文本数据的读取方法') def write(self):
print('文本数据的读取方法') class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('硬盘数据的读取方法') def write(self):
print('硬盘数据的读取方法') class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('进程数据的读取方法') def write(self):
print('进程数据的读取方法') wenbenwenjian=Txt() yingpanwenjian=Sata() jinchengwenjian=Process() #这样大家都是被归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read() print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)

day18 约束 异常的更多相关文章

  1. 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!

    在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...

  2. python约束 异常 MD5 日志处理

    一.约束 1.用父类执行约束 子类继承父类,用重写方法,对子类的方法进行约束. class Foo: def login(self): # 对子类进行约束,该方法需要重写 # 没有执行的错误 rais ...

  3. UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常

    今天做一个APP里面设置页面(个人中心) 就是一个列表菜单 顶部是一个头像和账户标题, 底部为一个退出登录按钮 当然我第一时间就想到了UITableView, HeaderView, FooterVi ...

  4. MySQL 外键异常分析

    外键约束异常现象 如下测例中,没有违反引用约束的插入失败. create database `a-b`; use `a-b`; SET FOREIGN_KEY_CHECKS=0; create tab ...

  5. python 面向对象(五)约束 异常处理 MD5 日志处理

    ###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...

  6. Oracle约束的启用和停用

      关于Oracle的约束概念和基本操作,我已经在以前的<Constraint基础概念>.<Constraint的简单操作>两篇文章中有过比较详细的介绍了,但是对于如何停用和启 ...

  7. Odoo中的约束

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9280735.html 一:装饰器约束(字段约束) 装饰器参数指定了约束的字段,当涉及的字段中任一发生改变时触发 ...

  8. Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验)

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第20篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符 ...

  9. HANA SQLScript

    数据类型 日期时间类型 DATE(日期) DATE 数据类型由年.月.日信息组成,表示一个日期值. DATA 类型的默认格式为‘YYYY-MM-DD’. YYYY 表示年, MM 表示月而 DD 表示 ...

随机推荐

  1. SQLAchemy ORM框架

    SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行S ...

  2. mysql sequelize 聚合

    User.findAll({attributes: [[sequelize.fn('COUNT', sequelize.col('*')), 'email']],raw: true }).then(f ...

  3. HiveServer2的配置使用

    HiveServer2的配置和使用 hive-site.xml配置 hiveserver2的配置 <property> <name>hive.support.concurren ...

  4. ZROI2018普转提day6t3

    传送门 分析 居然卡哈希数,万恶的出题人...... 感觉我这个方法似乎比较呆,我的代码成功成为了全网最慢的代码qwq 应该是可以直接哈希的 但由于我哈希学的不好又想练练线段树维护哈希,于是就写了个线 ...

  5. linux文件夹下载

    1.压缩文件夹 tar cvzf ./chinese.tar.gz /usr/share/fonts/chinese 2.下载 sz chinese.tar.gz

  6. CLRInjection - 通用托管注入(超级灰色按钮克星升级版)

    通用托管注入 - CLRInjection CLR软件系列第二发: 通用托管注入 - CLRInjection 软件简介:这款软件可以将任意托管DLL用插件的形式,注入到正在运行中的.net托管程序集 ...

  7. rpm bug

    rpm无法安装 今天安装java时候,下载的rpm的包,但是用linux打开时候发现不能正常打开. 错误详情 主要是rpm安装时候的错误,java提示的错误就没有记录了. Reading packag ...

  8. Java50道经典习题-程序25 根据输入求输出

    题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.分析:分别创建两个数用于判断,一个数为12321,另一个数是12341 分别取出该数的"个十百千万 ...

  9. 【Arcgis for android】Error inflating class com.esri.android.map.MapView【已解决】

    解决方案:如果你是一个项目之前调试是好的,突然调试报这个错,听我的,直接卸载手机上调试的这个程序,重新调试,你会发现ok了 环境:arcgis android 10.2 错误:E/AndroidRun ...

  10. winfrom强制退出程序(Application.Exit()与Environment.Exit(0))

    Application.Exit():通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口(先停止线程(前台线程执行完毕,后台线程自动结束),然后终止进程) Environment.Exi ...