小节案例"/>
Python 面向对象 小节案例
计算器
通过类属性的方式:
# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作class Caculator:__result = 0@classmethoddef first_value(cls, v):cls.__result = v@classmethoddef jia(cls, n):cls.__result += n@classmethoddef jian(cls, n):cls.__result -= n@classmethoddef cheng(cls, n):cls.__result *= n@classmethoddef show(cls):print('计算的结果是:%d' % cls.__result)Caculator.first_value(2)
Caculator.jia(6)
Caculator.jian(4)
Caculator.cheng(5)
Caculator.show()
通过对象属性:
# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作class Caculator:def __init__(self, num):self.__result = numdef jia(self, n):self.__result += ndef jian(self, n):self.__result -= ndef cheng(self, n):self.__result *= ndef show(cls):print('计算的结果是:%d' % cls.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
增加容错处理:
# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作class Caculator:def check_num(self, num):if not isinstance(num,int):raise TypeError()# raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')def __init__(self, num):self.check_num(num)self.__result = numdef jia(self, n):self.check_num(n)self.__result += ndef jian(self, n):self.check_num(n)self.__result -= ndef cheng(self, n):self.check_num(n)self.__result *= ndef show(cls):print('计算的结果是:%d' % cls.__result)c1 = Caculator('a')
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
修改为方法的单一职责(装饰器设计模式):
# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作class Caculator:def check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return inner@check_num_zsqdef __init__(self, num):self.__result = num@check_num_zsqdef jia(self, n):self.__result += n@check_num_zsqdef jian(self, n):self.__result -= n@check_num_zsqdef cheng(self, n):self.__result *= ndef show(cls):print('计算的结果是:%d' % cls.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
装饰器方法由实例方法,变为私有方法:
# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作class Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return inner@__check_num_zsqdef __init__(self, num):self.__result = num@__check_num_zsqdef jia(self, n):self.__result += n@__check_num_zsqdef jian(self, n):self.__result -= n@__check_num_zsqdef cheng(self, n):self.__result *= ndef show(cls):print('计算的结果是:%d' % cls.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
添加语音
pip install pypiwin32
import win32com.client# 1 创建一个播放器对象
speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串
speaker.Speak('王磊阳 你好')
import win32com.client# 1 创建一个播放器对象
speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串
speaker.Speak('你好')class Caculator:def __say(self, word):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(word)def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return inner@__check_num_zsqdef __init__(self, num):self.__say(num)self.__result = num@__check_num_zsqdef jia(self, n):self.__say(n)self.__result += n@__check_num_zsqdef jian(self, n):self.__say(n)self.__result -= n@__check_num_zsqdef cheng(self, n):self.__say(n)self.__result *= ndef show(self):self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
装饰器的嵌套:
import win32com.clientclass Caculator:def __say_zsq(func):def inner(self, n):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(n)return func(self, n)return innerdef __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return inner@__check_num_zsq@__say_zsqdef __init__(self, num):self.__result = num@__check_num_zsq@__say_zsqdef jia(self, n):self.__result += n@__check_num_zsq@__say_zsqdef jian(self, n):self.__result -= n@__check_num_zsq@__say_zsqdef cheng(self, n):self.__result *= ndef show(self):# self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
修改为不同的装饰器
import win32com.clientclass Caculator:def __say_zsq_init(func):def inner(self, n):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(n)return func(self, n)return innerdef __say_zsq_jia(func):def inner(self, n):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak('加 %d' % n)return func(self, n)return innerdef __say_zsq_jian(func):def inner(self, n):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak('减 %d' % n)return func(self, n)return innerdef __say_zsq_cheng(func):def inner(self, n):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak('乘 %d' % n)return func(self, n)return innerdef __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return inner@__check_num_zsq@__say_zsq_initdef __init__(self, num):self.__result = num@__check_num_zsq@__say_zsq_jiadef jia(self, n):self.__result += n@__check_num_zsq@__say_zsq_jiandef jian(self, n):self.__result -= n@__check_num_zsq@__say_zsq_chengdef cheng(self, n):self.__result *= ndef show(self):# self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
修改为带参数的装饰器
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return innerdef create_say_zsq(word=''):def __say_zsq(func):def inner(self, n):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@create_say_zsq('加')def jia(self, n):self.__result += n@__check_num_zsq@create_say_zsq('减')def jian(self, n):self.__result -= n@__check_num_zsq@create_say_zsq('乘')def cheng(self, n):self.__result *= ndef show(self):# self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return innerdef __say(self, word):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(word)def __create_say_zsq(word=''):def __say_zsq(func):def inner(self, n):self.__say(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@__create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@__create_say_zsq('加')def jia(self, n):self.__result += n@__check_num_zsq@__create_say_zsq('减去')def jian(self, n):self.__result -= n@__check_num_zsq@__create_say_zsq('乘以')def cheng(self, n):self.__result *= ndef show(self):self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
通过描述器返回结果
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return innerdef __say(self, word):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(word)def __create_say_zsq(word=''):def __say_zsq(func):def inner(self, n):self.__say(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@__create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@__create_say_zsq('加')def jia(self, n):self.__result += n@__check_num_zsq@__create_say_zsq('减去')def jian(self, n):self.__result -= n@__check_num_zsq@__create_say_zsq('乘以')def cheng(self, n):self.__result *= ndef show(self):self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)@propertydef result(self):return self.__resultc1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
print(c1.result)
链式编程
import win32com.clientclass Caculator:def __check_num_zsq(func):def inner(self, n):if not isinstance(n, int):raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')return func(self, n)return innerdef __say(self, word):# 1 创建一个播放器对象speaker = win32com.client.Dispatch("SAPI.SpVoice")# 2 通过这个播报器对象,播报相对应的语音字符串speaker.Speak(word)def __create_say_zsq(word=''):def __say_zsq(func):def inner(self, n):self.__say(word + str(n))return func(self, n)return innerreturn __say_zsq@__check_num_zsq@__create_say_zsq()def __init__(self, num):self.__result = num@__check_num_zsq@__create_say_zsq('加')def jia(self, n):self.__result += nreturn self@__check_num_zsq@__create_say_zsq('减去')def jian(self, n):self.__result -= nreturn self@__check_num_zsq@__create_say_zsq('乘以')def cheng(self, n):self.__result *= nreturn selfdef show(self):self.__say('计算的结果是:%d' % self.__result)print('计算的结果是:%d' % self.__result)return selfdef clear(self):self.__result = 0return self@propertydef result(self):return self.__resultc1 = Caculator(2)
c1.jia(6).jian(4).cheng(5).show().clear().jia(555).jian(500).show()
print(c1.result)
更多推荐
Python 面向对象 小节案例
发布评论