Python 面向对象 小节案例

tech2024-07-24  57

计算器

通过类属性的方式:

# 计算器 实现一些基本操作,加减乘除运算,以及打印结果操作 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)
最新回复(0)