模块、类、对象和实例

今天编写一个计算方法来把模块、类、对象实例包括异常处理机制展现出来,我在代码段进行了简明注释(使用python3.6):

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

class test(object):
    name = "test"                          #test的公共属性
    def __init__(self, a, b, c = 0):       #自身初始化
        self.a = a
        self.b = b
        self.c = a + b
    def res(self):                         #返回值函数
        return self.c
    def __str__(self):                     #只返回字符串
        str1 = '计算' + str(self.a)  + '+' + str(self.b) + '的值 = '   #加法计算
        return str1     #返回值
class test1(object):
    name = "test1"                          #test1的共享属性
    def __init__(self, a, b, c = 0):        #自身初始化
        self.a = a
        self.b = b
        self.c = a - b
    def res(self):                         #返回值函数
        return self.c
    def __str__(self):                     #只返回字符串
        str1 = '计算' + str(self.a)  + '-' + str(self.b) + '的值 = '   #减法计算
        return str1     #返回值

def add_math(x,y):      #加法函数
    try:                #异常处理
        a = float(x)
        b = float(y)
        lt = test(a,b)  #lt为test类的实例化
        lt1 = lt.res()  #对lt1进行赋值,值为lt.res()的返回值
        print("(a+b)value from ",lt.name)    #引用并打印属性
        return lt1      #返回lt1的值

    except NameError as err:
        print ("<class '名称错误'>")    #打印一段说明
        print (err.__doc__)         #打印错误详细说明
    except ValueError as err1:      #传值错误,比如将值写成了字符串
        print ("<class '传值错误'>")
        print (err1.__class__.__doc__)
        print (type(err1))

def sub_math(x,y):     #减法函数
    try:                #异常处理
        a = float(x)
        b = float(y)
        lt = test1(a,b)     #lt为test1类的实例化
        lt1 = lt.res()      #对lt1进行赋值,值为lt.res()的返回值
        print("(a-b)value from ", lt.name)    #引用并打印属性
        return lt1          #返回lt1的值

    except NameError as err3:   #名称错误
        print ("<class '名称错误'>")    #打印一段说明
        print (err3.__doc__)        #打印错误详细说明
    except ValueError as err4:      #传值错误,比如将值写成了字符串
        print ("<class '传值错误'>")
        print (err4.__class__.__doc__)
        print (type(err4))

基本介绍:

我们把上面的代码保存为class_test.py文件,上面代码中的test1test2就是两个类,而add_math(x,y)sub_math(x,y)是定义的两个函数,定义一个类以 class开头+空格+类名称[([object])]:,定义一个函数以def开头+空格+函数名称([参数1],[参数2],...):,(方括号[]是指可选的)test1和test2是类名称,nameclass的属性;不同的类中同名的属性名称是不冲突的,你看到的test和test1都有name属性,但是这两个name不是同一个name,你可以理解为不同的两个人都有一个iphone,而iphone只是品牌相同但是每个人的iphone都是独一无二的!同样的在 add_math(x,y)sub_math(x,y)里的x,y他们也不是同一个参数,他们只在各自的函数中起作用,并不冲突,在引用函数时候,add_math(100,200),相当于将x,y的值赋值为100和200,并且只在add_math()中生效,并不会影响到sub_math(),(往下我会进行简单的演示)

异常处理机制:

try ... except ... 是一种异常处理,用于python中的Error异常处理,上面的NameError:尝试访问一个没有申明的变量,ValueError:传给函数的参数类型不正确,比如给float()函数传入字符串 ,try:里的内容是需要进行的异常处理过程,如有异常,会根据异常类型来执行except语句里面的内容

演示:

我们来创建第二个python文件 test.py,代码如下,里面有每一行的解释

import class_test # 导入class_test.py模块
'''
以下用来输入两个数值 a 与 b ,计算 (a+b)/(a-b)的数值,并且进行异常处理
把代码写这么长是用来看出每一个过程的实现和异常的处理
'''
def add_desc_floor(): #构造函数
    '''

    :param a: float
    :param b: float
    :return: c = (a+b)/(a-b)
    '''
    try: #try ... except ... 异常处理语句
        a = float(input("input a:"))  # 输入浮点a值
        b = float(input("input b:"))  # 输入浮点b值
        n1 = float(class_test.add_math(a,b))    #n1 = (a+b)

        n2 = float(class_test.sub_math(a,b))   #n2 = (a-b)
        print ("(a+b)=",n1,"(a-b)",n2,",",n1," / ",n2," = ",n1/n2)  #打印计算数值
    except ZeroDivisionError as var1:   #除数为零的异常处理
        print ("除数不能为0,无法计算!") #打印说明行
        print (type(var1))
    except ValueError as var2:
        print ("输入参数类型错误!")
        print (type(var2))

def main():     #主函数
    print ("[计算(a+b)/ (a-b)的值]")
    c = add_desc_floor()       #代入值到计算函数

if __name__ == '__main__':  #执行
    '''
    当.py文件被直接运行:
    if __name__ =='__main__':之下的代码块将被运行                                                        
    当.py文件以模块形式被导入:
    if __name__ == '__main__':之下的代码块不被运行
    '''
    main()

'''
test.py 
'''

执行test.py:

[计算(a+b)/ (a-b)的值]
input a:

输入正确参数:

input:

[计算(a+b)/ (a-b)的值]
input a:100
input b:200

result:

(a+b)value from  test
(a-b)value from  test1
(a+b)= 300.0 (a-b) -100.0 , 300.0  /  -100.0  =  -3.0


Process finished with exit code 0

没有错误,会发现成功计算(a+b)/ (a-b)的值

输入错误参数:

ValueError:
[计算(a+b)/ (a-b)的值]
input a:wewe           #字符串形式的参数

result:

输入参数类型错误!
<class 'ValueError'>
ZeroDivisionError:
[计算(a+b)/ (a-b)的值]
input a:0
input b:0

result:

除数不能为0,无法计算!
<class 'ZeroDivisionError'>

直接报错,说明过程进行了异常处理!

 

note:

下面的 if __name__ == '__main__': 语句是指.py程序判断是否运行在自身的代码中,如果在则运行 if __name__ == '__main__':下面的语句

if __name__ == '__main__':  #执行
    '''
    当.py文件被直接运行:
    if __name__ =='__main__':之下的代码块将被运行                                                        
    当.py文件以模块形式被导入:
    if __name__ == '__main__':之下的代码块不被运行
    '''
    main()

'''
test.py 

 

小结:

本文章通过两段代码来简单说明了类、对象、实例、模块特点和使用,以及异常处理函数的运用,如果作者有任何说明不到位的地方请指正!文章给刚入门python的小白看,因此,没有说太多绕弯子的专业术语!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值