Python 面向对象 小节案例

编程入门 行业动态 更新时间:2024-10-08 05:22:16

Python 面向对象 <a href=https://www.elefans.com/category/jswz/34/1751020.html style=小节案例"/>

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 面向对象 小节案例

本文发布于:2024-03-23 15:07:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1739593.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小节   面向对象   案例   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!