当前位置: 首页 > news >正文

python---面向对象---综合案例(4)

案例描述

实现加减乘法运算

# _*_ encoding:utf-8 _*_# 计算器, 实现一些基本的操作, 加减乘除运算, 以及打印结果操作# ------------------------------------代码1--------------------------------------
def jia(n1, n2):return n1 + n2def jian(n1, n2):return n1 - n2def cheng(n1, n2):return n1 * n2res = jia(2, 4)
res2 = cheng(5, 7)
print(res)
print(res2)#(2 + 6 - 4) * 5
r1 = jia(2, 6)
r2 = jian(r1, 4)
r3 = cheng(r2, 5)
print(r3)# ------------------------------------代码2--------------------------------------
result = 0def first_value(v):global resultresult = vdef jia(n):global resultresult += ndef jian(n):global resultresult -= ndef cheng(n):global resultresult *= nfirst_value(2)
jia(6)
result = 123
jian(4)
cheng(5)
print(result)# ------------------------------------代码3--------------------------------------
## 封装到类,提高安全性
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()# ------------------------------------代码4--------------------------------------
## 增加并发功能
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(self):print("计算的结果是:%d" % self.__result)
# 创建计算器
c1 = Caculator(2)
# 运算
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码5--------------------------------------
## 容错处理,数据验证
class Caculator:def check_num(self, num):if not isinstance(num, int):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(self):print("计算的结果是:%d" % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian("a")
c1.cheng(5)
c1.show()# ------------------------------------代码6--------------------------------------
# 使用装饰器进行优化重构,维护代码的完整性
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(self):print("计算的结果是:%d" % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码7--------------------------------------
# 实例调用类中的装饰器会报错,将装饰器设为私有
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(self):print("计算的结果是:%d" % self.__result)c1 = Caculator(2)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码8--------------------------------------
# 针对用户的每个操作,进行语音播报,类似开启语音播报的计算器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):# 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(10)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码9--------------------------------------
# 播报优化
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(10)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()# ------------------------------------代码10--------------------------------------
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(10)
c1.jia(6)
c1.jian(4)
c1.cheng(5)
c1.show()print(c1.result)
c1.result = 10# ------------------------------------代码11--------------------------------------
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(10)
c1.jia(6).jian(4).cheng(5).show().clear().jia(555).jian(500).show() # 链式编程,在方法内部再次返回调用方法的实例本身print(c1.result)# ------------------------------------代码12--------------------------------------import win32com.clientclass Caculator(object):@staticmethoddef __say(word):speaker = win32com.client.Dispatch("SAPI.SpVoice")speaker.Speak(word)def createSayZSQ(operation=""):def say(func):def inner(self, v):Caculator.__say(operation + str(v))return func(self, v)return innerreturn saydef __check_num(func):def inner(self, v):if not isinstance(v, int):raise TypeError("数据类型有误, 应该是一个整型数据")return func(self, v)return inner@createSayZSQ()@__check_numdef __init__(self, v):self.__result = v@createSayZSQ("加")@__check_numdef jia(self, n):self.__result += nreturn self@createSayZSQ("减")@__check_numdef jian(self, n):self.__result -= nreturn self@createSayZSQ("乘")@__check_numdef cheng(self, n):self.__result *= nreturn selfdef show(self):self.__say("计算结果为:%d" % self.__result)print("计算结果为:%d" % self.__result)return selfc = Caculator(2)
c.jia(6).jian(4).cheng(3).show()

补充

使用Python调用微软的语音接口import win32com.clientspeaker = win32com.client.Dispatch("SAPI.SpVoice")speaker.Speak(word)

相关文章:

python---面向对象---综合案例(4)

案例描述 实现加减乘法运算 # _*_ encoding:utf-8 _*_# 计算器, 实现一些基本的操作, 加减乘除运算, 以及打印结果操作# ------------------------------------代码1-------------------------------------- def jia(n1, n2):return n1 n2def jian(n1, n2):return n1 - n2de…...

如何参加华为欧拉考试?

华为欧拉考试主要针对的是华为欧拉(EulerOS/openEuler)操作系统的认证考试,这一认证体系旨在培养和认证具备基于欧拉操作系统进行企业级应用运行基础环境搭建、管理和调测能力的工程师以及云计算架构师。以下是对华为欧拉考试的详细介绍&…...

算法预刷题Day9:BM28 二叉树的最大深度

描述: 描述 求给定二叉树的最大深度, 深度是指树的根节点到任一叶子节点路径上节点的数量。 最大深度是所有叶子节点的深度的最大值。 (注:叶子节点是指没有子节点的节点。) 思路: 当前节点的最大高度 ma…...

exp_lr_scheduler理解

1. exp_lr_scheduler理解 这行代码定义了一个学习率调度器,用于动态调整训练过程中优化器的学习率。让我们分解并解释其含义: 1. exp_lr_scheduler 是什么? exp_lr_scheduler 是一个 学习率调度器(LR Scheduler),由 torch.optim.lr_scheduler.StepLR 创建,旨在按照预…...

Algorithm:河内之塔

1. 说明 河内之塔(Towers of Hanoi)是法国人 M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas 曾提及这个故事,据…...

集中管理与实时审计:构建Linux集群(1300台服务器)日志平台的最佳实践

简介 随着企业IT基础设施的不断扩大,Linux服务器的数量也日益增多,传统的单机日志管理方式已无法满足对日志数据集中管理、审计和分析的需求。尤其是在大型集群环境中,如何高效地收集、存储和分析日志成为了一项重要的技术挑战。 背景 在实…...

在Scala中Array不可变的学习

package gjhs114import scala.collection.mutable.ArrayBuffer object Arrray114 {// 不可变数组:Array// def main(args: Array[String]): Unit {1 创建不可变数组// val arr1 Array(1,2,3)//2 访问.数组名(下标)。下标是从0开始到…...

vue3+vite 批量引入组件动态使用

import { ref, reactive, toRaw, markRaw, defineAsyncComponent, onMounted } from vue import type { Component } from vue// vue3vite 批量引入组件动态使用 const modules import.meta.glob<Component>(./details/*.vue) // 明确指定导入的模块类型为Component con…...

设计模式——方法链or流式接口

方法链或流式接口是一种编程模式或设计模式。核心思想是通过返回对象自身的应用&#xff0c;使得可以在一个表达式中连续调用多个方法。 c中实现这种模式 1.基本语法规则 &#xff08;1&#xff09;每个可链接的方法都返回对象自身的引用&#xff08;通常是*this&#xff09…...

JAVA OPCUA 服务端开发,客户端连接会话监听和订阅事件监听

前言 关于使用milo开源库,开发opc ua服务器,有网友咨询如何设置服务端如何监听客户端的连接或断开事件,如何监听客户端发起订阅事件的代码实现,于是我完善了这部分的空缺整理整了这篇教程,希望能解决有同样需求,但是遇到困难的网友!因为milo没有官方文档的教程且网上详…...

pytest相关总结

1.pytest -v -s -v将测试用例名称和用例中的输出进行展示&#xff0c;将每条用例脚本的内容逐行进行结果展示&#xff1b; -s 参数是为了显示用例执行层级的打印信息 pytest使用总结笔记 - fengf233 - 博客园 2....

cin/cout的性能优化和缓冲区同步问题

目录 背景导入 问题 1.1ios::sync_with_stdio(false) 1.2为什么要解除C/C IO流同步? 1.3使用场景 2.1cin和cout的绑定关系 2.2为什么要解除绑定关系? 2.3注意事项 背景导入 大家可以先看一下这段背景知识;后面我会谈谈自己的理解; 1.在C中&#xff0c;标准输⼊输出流…...

redisson-spring-data与Spring-Data-Redis的版本关系问题

redisson-spring-boot-starter https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter https://github.com/redisson/redisson/tree/master/redisson-spring-data#spring-data-redis-integration 将 Redisson 与 Spring Boot 库集成。依赖于Spring…...

Puppeteer代理认证的最佳实践和示例

在现代网络环境中&#xff0c;代理服务器的使用越来越普遍&#xff0c;尤其是在数据抓取、网页自动化测试和网络监控等领域。Puppeteer作为一个流行的Node库&#xff0c;它提供了高级的API来控制Chrome或Chromium浏览器。在某些情况下&#xff0c;我们需要通过代理服务器来执行…...

js 字符串 只显示数字

1. 使用正则表达式的match方法 原理&#xff1a;正则表达式\d用于匹配一个或多个数字。match方法会在字符串中查找与正则表达式匹配的部分&#xff0c;并返回一个包含所有匹配结果的数组。示例代码&#xff1a; let str "abc123def456"; let numbers str.match(/…...

STM32标准库-FLASH

FLASH模仿EEPROM STM32本身没有自带EEPROM&#xff0c;但是自带了FLASH存储器。 STM32F103ZET6自带 1M字节的FLASH空间&#xff0c;和 128K64K的SRAM空间。 STM32F4 的 SPI 功能很强大&#xff0c;SPI 时钟最高可以到 37.5Mhz&#xff0c;支持 DMA&#xff0c;可以配置为 SPI协…...

PowerShell:查找并关闭打开的文件

Get-SmbOpenFile 打开 Windows PowerShell 并运行 Get-SmbOpenFile | Format-List 若要仅显示特定文件共享的连接&#xff0c;请使用 Where-Object 运行 Get-SmbOpenFile。 Get-SmbOpenFile | Where-Object Path -eq "C:\Data\" | Format-List Get-SmbSession 显…...

【AI系统】昇腾异构计算架构 CANN

昇腾异构计算架构 CANN 本文将介绍昇腾 AI 异构计算架构 CANN&#xff08;Compute Architecture for Neural Networks&#xff09;&#xff0c;这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN 包括硬件层面的达芬奇架构和软件层面的全栈支持&#xff0c;旨在提供…...

STM32 HAL库开发学习3.STM32启动浅析

STM32 HAL库开发学习3.STM32启动浅析 一、STM32启动模式&#xff08;也称自举模式&#xff09;1. MSP与PC指针赋值2. F1系列的启动模式&#xff1a;3. F4系列启动模式4. F7系列启动模式5. H7系列启动模式 二、STM32启动过程1. MSP 栈顶地址2. PC值3. Reset_Handler4. 启动文件内…...

FakeLocation 1.3.5 BETA 提示校园跑漏洞修复解决

任务一 作者对此又进行了更新&#xff0c;在本次更新中&#xff0c;我们依旧使用hookvip进行破解 本次的更新&#xff0c;使得包名强制写入更加严重&#xff0c;之前靠一些方法已经无法阻止appconfigs.xml的文件的修改&#xff0c;而且使得验证加强&#xff0c;和云端加强&…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...