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

python实现一个计算器

'''
实现一个计算器
'''
'''
首先熟悉一下这个阅读器的属性
'''
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.lryc.cn/news/254128.html

相关文章:

  • C++ 共享内存ShellCode跨进程传输
  • 如何快速移植(从STM32F103到STM32F407)
  • python高级练习题库实验1(B)部分
  • Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存储和内存存储密钥)
  • 区分物理端口与软件端口概念:以交换机端口和Linux系统中的端口为例
  • 力扣226:翻转二叉树
  • 亚马逊鲲鹏系统智能自动注册与AI角色养号,探索数字化新境界
  • AOP操作日志记录
  • Linux C语言 42-进程间通信IPC之网络通信(套接字)
  • 微服务知识大杂烩
  • 记录一次vscode markdown的图片路径相关插件学习配置过程
  • 设计原则 | 依赖转置原则
  • 前端开发实用技巧与经验分享
  • 推荐一款Excel快速加载SQL的插件,方便又好用
  • Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)
  • http和https的区别有哪些
  • 使用Keil-MDK生成*.bin格式可执行文件
  • 基于springboot+vue篮球联盟管理系统源码
  • 分页助手入门以及小bug,报sql语法错误
  • Java中的并发编程:深入理解CountDownLatch
  • Windows 安装 flash-attention 和 bitsandbytes
  • AHB 与 DMA
  • React使用echarts并且修改echarts图大小
  • 【Q6-30min】
  • C++之类和对象(下)
  • 微服务开发:断路器详解
  • Leetcode—383.赎金信【简单】
  • 爬虫-xpath篇
  • Oracle初始化参数文件pfile和spfile
  • zookeeper 客户端常用命令简单记录(实操课程系列--watcher功能测试)(发布订阅功能测试)