计算器
通过类属性的方式:
# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作
class Caculator:
__result = 0
@classmethod
def first_value(cls, v):
cls.__result = v
@classmethod
def jia(cls, n):
cls.__result += n
@classmethod
def jian(cls, n):
cls.__result -= n
@classmethod
def cheng(cls, n):
cls.__result *= n
@classmethod
def 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 = num
def jia(self, n):
self.__result += n
def jian(self, n):
self.__result -= n
def cheng(self, n):
self.__result *= n
def 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 = num
def jia(self, n):
self.check_num(n)
self.__result += n
def jian(self, n):
self.check_num(n)
self.__result -= n
def cheng(self, n):
self.check_num(n)
self.__result *= n
def 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_zsq
def __init__(self, num):
self.__result = num
@check_num_zsq
def jia(self, n):
self.__result += n
@check_num_zsq
def jian(self, n):
self.__result -= n
@check_num_zsq
def cheng(self, n):
self.__result *= n
def 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_zsq
def __init__(self, num):
self.__result = num
@__check_num_zsq
def jia(self, n):
self.__result += n
@__check_num_zsq
def jian(self, n):
self.__result -= n
@__check_num_zsq
def cheng(self, n):
self.__result *= n
def 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_zsq
def __init__(self, num):
self.__say(num)
self.__result = num
@__check_num_zsq
def jia(self, n):
self.__say(n)
self.__result += n
@__check_num_zsq
def jian(self, n):
self.__say(n)
self.__result -= n
@__check_num_zsq
def cheng(self, n):
self.__say(n)
self.__result *= n
def 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.client
class 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 inner
def __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
def __init__(self, num):
self.__result = num
@__check_num_zsq
@__say_zsq
def jia(self, n):
self.__result += n
@__check_num_zsq
@__say_zsq
def jian(self, n):
self.__result -= n
@__check_num_zsq
@__say_zsq
def cheng(self, n):
self.__result *= n
def 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.client
class 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 inner
def __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 inner
def __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 inner
def __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 inner
def __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_init
def __init__(self, num):
self.__result = num
@__check_num_zsq
@__say_zsq_jia
def jia(self, n):
self.__result += n
@__check_num_zsq
@__say_zsq_jian
def jian(self, n):
self.__result -= n
@__check_num_zsq
@__say_zsq_cheng
def cheng(self, n):
self.__result *= n
def 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.client
class Caculator:
def __check_num_zsq(func):
def inner(self, n):
if not isinstance(n, int):
raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')
return func(self, n)
return inner
def 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 inner
return __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 *= n
def 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.client
class Caculator:
def __check_num_zsq(func):
def inner(self, n):
if not isinstance(n, int):
raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')
return func(self, n)
return inner
def __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 inner
return __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 *= n
def 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.client
class Caculator:
def __check_num_zsq(func):
def inner(self, n):
if not isinstance(n, int):
raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')
return func(self, n)
return inner
def __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 inner
return __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 *= n
def show(self):
self.__say('计算的结果是:%d' % self.__result)
print('计算的结果是:%d' % self.__result)
@property
def result(self):
return self.__result
c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()
print(c1.result)
链式编程
import win32com.client
class Caculator:
def __check_num_zsq(func):
def inner(self, n):
if not isinstance(n, int):
raise TypeError('当前这个数据的类型有问题,应该是一个整型数据')
return func(self, n)
return inner
def __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 inner
return __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
return self
@__check_num_zsq
@__create_say_zsq('减去')
def jian(self, n):
self.__result -= n
return self
@__check_num_zsq
@__create_say_zsq('乘以')
def cheng(self, n):
self.__result *= n
return self
def show(self):
self.__say('计算的结果是:%d' % self.__result)
print('计算的结果是:%d' % self.__result)
return self
def clear(self):
self.__result = 0
return self
@property
def result(self):
return self.__result
c1 = Caculator(2)
c1.jia(6).jian(4).cheng(5).show().clear().jia(555).jian(500).show()
print(c1.result)