一、封装
··把内部具体的数据和对数据的运算屏蔽,只对外展示操作接口,让外部调用者只关心输入与输出
如:创建类,在类中定义函数,对象调用类内方法时,直接使用即可,不关心定义操作。
二、接口
·接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。
·接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部功能。
·在python中接口由抽象类和抽象方法去实现,接口是不能被实例化的,只能被别的类继承去实现相应的功能。
(1)用抽象类和抽象函数实现方法?
from abc import ABCMeta,abstractmethod
class interface(object):
__metaclass__ = ABCMeta #指定这是一个抽象类
@abstractmethod #抽象方法
def aaa(self):
pass
def edc(self):
pass
class RelalizeInterfaceLee(interface):#必须实现interface中的所有函数,否则会编译错误
def __init__(self):
print('这是接口interface的实现')
def aaa(self):
print('实现aaa功能')
def edc(self):
pass
class RelalizeInterfaceMarlon(interface): #必须实现interface中的所有函数,否则会编译错误
def __init__(self):
print('这是接口interface的实现')
def aaa(self):
pass
def edc(self):
print("实现edc功能")
(2)用普通类定义接口?
class interface(object): #假设这就是一个接口,接口名可以随意定义,所有的子类不需要实现在这个类中的函数
def aaa(self):,
pass
def edc(self):
pass
class Realaize_interface(interface):
def __init__(self):
pass
def aaa(self):
print "实现接口中的aaa函数"
class Realaize_interface2(interface):
def __init__(self):
pass
def edc(self):
print "实现接口中的edc函数"
三、异常处理
1.异常处理机制
try块可测试代码块的错误。except块可处理异常,报错后执行
try:
n1 = int(input("整数1"))
n2 = int(input("整数2"))
result = n1/n2
print('结果为',result)
except: #用except ZeroDivisionError 设定异常类型
print("除数不能为0")
else: #可结合else使用
print('完毕')
finally:如果指定了该块,则无论 try 块是否引发错误,都将执行该块。
try:
n1 = int(input("整数1"))
n2 = int(input("整数2"))
result = n1/n2
print('结果为',result)
except: #用except ZeroDivisionError: 设定出错类型(可带多个)
print("除数不能为0")
finally:
print("完毕")
2.引发异常
使用raise关键字引发异常
例如如果 x 小于 0,则引发错误并停止程序:
n1 = 4
n1 = 0
if n2 == 0:
raise ZeroDivisionError("除数不能为0")
# 自己定义要引发的错误类型以及反馈文本
3.常见异常类型
1.AssertionError:当assert断言条件为假的时候抛出的异常
2.AttributeError:当访问的对象属性不存在的时候抛出的异常
3.IndentationError:缩进错误
4.IndexError:超出对象索引的范围时抛出的异常
5.KeyError:在字典中查找一个不存在的key抛出的异常
6.NameError:访问一个不存在的变量时抛出的异常
7.OSError:操作系统产生的异常
8.SyntaxError:语法错误时会抛出此异常
9.TypeError:类型错误,通常是不通类型之间的操作会出现此异常
10.ValueError:传入无效的参数
11.ZeroDivisionError:进行数学运算时除数为0时会出现此异常
4.用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
在定义以上类后,可以触发该异常
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
5.traceback模块
用traceback模块打印异常信息
import traceback
try:
print('1.--------')
num = 10/0
except:
traceback.print_exc()
1.--------
Traceback (most recent call last):
File "E:/a/chap1/demol.py", line 7, in <module>
num = 10/0
ZeroDivisionError: division by zero