python实现一个计算器

news/2025/2/19 8:20:24/
'''
实现一个计算器
'''
'''
首先熟悉一下这个阅读器的属性
'''
import subprocess
subprocess.run(["espeak", "-v", "en+f3", "This is a Calculator"])class Calculator:def speaker(self,word):subprocess.run(["espeak", "-v", "en+f3", word])def __check(func): #我要检查一下每一个输入的数值是不是数字 装饰器只接收func为参数,其余参数都是给inner的def inner(self,n):if not isinstance(n,(int, float)):raise ValueError('you should input a number')func(self,n)return innerdef __create_creator(word=''):def creator(func):def inner(self,n):self.speaker(word + str(n))func(self,n)return innerreturn creator@__checkdef __init__(self,n):self.__res=n  #让res私有化,这样就不能从外界改变它的值@__check@__create_creator('plus')def plus(self,n):self.__res+=nreturn self #加上这句话就可以链式使用方法了@__check@__create_creator('minus')def minus(self,n):self.__res-=nreturn self@__check@__create_creator('multiply')def multiply(self,n):self.__res *= nreturn self@__check@__create_creator('divide')def divide(self,n):self.__res /= nreturn self@propertydef result(self): #result不可以被私有化,不然从外界也无法读到return self.__resdef show(self):print(self.__res)self.speaker(f'the result is {self.__res}')return self# c=Calculator(2)
# print(c.result)
# c.plus(1)
# print(c.result)
# c.minus(1)
# print(c.result)
# c.multiply(10)
# c.divide(5)
# c.show()c2=Calculator(3)
print(c2.__class__)
print(c2.plus(1).__class__)
c2.show() 

加上return self应该可以链式使用的,但是却报错了class是None type...

先记录一下,后面再看看到底咋回事

后续:

破案了,写装饰器的时候def inner没有return func()

'''
实现一个计算器
'''
'''
首先熟悉一下这个阅读器的属性
'''
import subprocess
subprocess.run(["espeak", "-v", "en+f3", "This is a Calculator"])class Calculator:def speaker(self,word):subprocess.run(["espeak", "-v", "en+f3", word])def __check(func): #我要检查一下每一个输入的数值是不是数字 装饰器只接收func为参数,其余参数都是给inner的def inner(self,n):if not isinstance(n,(int, float)):raise ValueError('you should input a number')return func(self,n)return innerdef __create_creator(word=''):def creator(func):def inner(self,n):self.speaker(word + str(n))return func(self,n)return innerreturn creator@__checkdef __init__(self,n):self.__res=n  #让res私有化,这样就不能从外界改变它的值@__check@__create_creator('plus')def plus(self,n):self.__res+=nreturn self #加上这句话就可以链式使用方法了@__check@__create_creator('minus')def minus(self,n):self.__res-=nreturn self@__check@__create_creator('multiply')def multiply(self,n):self.__res *= nreturn self@__check@__create_creator('divide')def divide(self,n):self.__res /= nreturn self@propertydef result(self): #result不可以被私有化,不然从外界也无法读到return self.__resdef reset(self):self.__res = 0return selfdef show(self):print(self.__res)self.speaker(f'the result is {self.__res}')return self# c=Calculator(2)
# print(c.result)
# c.plus(1)
# print(c.result)
# c.minus(1)
# print(c.result)
# c.multiply(10)
# c.divide(5)
# c.show()c2=Calculator(3)
print(c2.__class__)
print(c2.plus(1).__class__)
c2.plus(1).minus(1).multiply(2).show().divide(2).show().reset()
c2.show()

这样就对了


http://www.ppmy.cn/news/1259701.html

相关文章

Vue学习计划-Vue2--Vue核心(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

ApplicationContextAware 类

优质博文&#xff1a;IT-BLOG-CN 需求&#xff1a; 使用autowired注入一些对象&#xff0c;但发现不可以直接使用Autowired&#xff0c;因为方法是static的&#xff0c;要使用该方法当前对象也必须是static&#xff0c;正常情况下Autowired无法注入静态的bean&#xff0c;于是…

Splashtop 荣获 SDC“年度安全供应商”奖

2023年12月5日 荷兰阿姆斯特丹 Splashtop 是随处办公环境改革的先驱&#xff0c;在伦敦举办的第14届 SDC 颁奖典礼上荣获“年度安全供应商”奖&#xff0c;我们对此感到十分自豪。荣获这一知名奖项凸显了 Splashtop 致力于通过企业级加密和基于权限的访问保护不同规模组织的决…

python进行文件批量命名

目录 1、传递需要修改文件的上一级目录root_path&#xff0c;step的作用是生成不同的文件&#xff0c;convert_format是转化为特定的格式 2、代码使用 1、传递需要修改文件的上一级目录root_path&#xff0c;step的作用是生成不同的文件&#xff0c;convert_format是转化为特…

Nashorn 简介

1. 引言 本文重点介绍 Nashorn – 从 Java 8 开始&#xff0c;JVM 的新默认 JavaScript 引擎。 许多复杂的技术已被用于使 Nashorn 的性能比其前身 Rhino 高出几个数量级&#xff0c;因此这是一个值得的改变。让我们来看看它的一些使用方式。 本文大部分内容翻译自&#xff1…

SAP CA01/CA02 创建及更新工艺路线BAPI

前言 最近需要做一个routing的批导&#xff0c;初步查过资料后&#xff0c;发现下面几个BAPI: BAPI_ROUTING_CREATE&#xff1a;最常用的BAPI&#xff0c;只支持创建&#xff0c;没有对应的CHANGE BAPI&#xff1b; ROUTING_MAINTAIN&#xff1a;不支持创建&#xff0c;只支…

flink源码分析之功能组件(四)-slot管理组件I

简介 本系列是flink源码分析的第二个系列&#xff0c;上一个《flink源码分析之集群与资源》分析集群与资源&#xff0c;本系列分析功能组件&#xff0c;kubeclient&#xff0c;rpc&#xff0c;心跳&#xff0c;高可用&#xff0c;slotpool&#xff0c;rest&#xff0c;metrics&…

书-用数组存储高于60低于70的人单独存起来

#include<stdio.h> # define N 10 //书-用数组存储高于60低于70的人单独存起来 int main(){float s[N]{68.2,62.3,63.4,34.5,45.6,56.7,67.8,78.9,89.0,100};int i;float diyu[100];int j0;for(i0;i<N;i){if(s[i]>60 && s[i]<70)diyu[j]s[i];//这里的范…