python学习记录4

一、封装

··把内部具体的数据和对数据的运算屏蔽,只对外展示操作接口,让外部调用者只关心输入与输出

如:创建类,在类中定义函数,对象调用类内方法时,直接使用即可,不关心定义操作。

二、接口

·接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。

·接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值