一个类的例子--员工工资
类的例子
- 1.完整代码
- 2.错误总结
从学习中写的一个类学习类的知识
1.完整代码
"""
问题:某公司有三种类型的员工 分别是部门经理、程序员和销售员
需要设计一个工资结算系统 根据提供的员工信息来计算月薪
部门经理的月薪是每月固定15000元
程序员的月薪按本月工作时间计算 每小时150元
销售员的月薪是1200元的底薪加上销售额5%的提成
"""
#abc库用来创建抽象类,即只可以继承,不能创建实例(三步:导库+step1+step2)
from abc import ABCMeta,abstractmethod#固定月薪,时薪,底薪和提成
changeless_get = 15000
each_day_get = 150
base_get = 1200
get_proportion = 0.05#父类,且是抽象类,只能用于继承
class Employee(metaclass=ABCMeta): #抽象类实现step1:metaclass=ABCMetadef __init__(self,name):self.__name = name #双下划线代表是私有变量#@property装饰器的使用#这边是获取私有变量,方法和属性名一样,#则可以通过name来获取私有变量的名字@property def name(self):return self.__name#属性名.setter用来修改私有变量,也是property装饰器的方法@name.setterdef name(self,name):self.__name = name@abstractmethod #抽象类实现step2:@abstractmethod抽象类的方法def get_money(self):passclass Manger(Employee): #继承父类(超类)Employee,Manger即为子类def get_money(self): #重载(重写)方法,实现多态print("经理%s本月薪资%.2f元"%(self.name,changeless_get))class Program_man(Employee): #继承def __init__(self,name,work_time=0):super().__init__(name) #初始化子类属性用super().__init__self.__worktime = work_time #新增属性@propertydef worktime(self):return self.__worktime@worktime.setterdef worktime(self,worktime):self.__worktime = worktimedef get_money(self): #重载print("程序员%s该月的工资是%.2f元"%(self.name,each_day_get*self.__worktime))class sale_man(Employee):def __init__(self,name,earn):super().__init__(name)self.__earn = earn@propertydef earn(self):return self.__earn@earn.setterdef earn(self,earn):self.__earn = earndef get_money(self):print("销售员%s本月工资%.2f元"%(self.name,base_get+get_proportion*self.__earn))def main():manger_1 = Manger("张三")manger_1.get_money()program_man_1 = Program_man("雷军",150)program_man_1.get_money()sale_man_1 = sale_man("陈睿",82400)sale_man_1.get_money()if __name__ == '__main__': #写模块必写,表示只有运行该文件才运行如下方法main()
结果:
经理张三本月薪资15000.00元
程序员雷军该月的工资是22500.00元
销售员陈睿本月工资5320.00元
2.错误总结
①:
class Program_man(Employee):def __init__(self,name,work_time=0):super.__init__(name)self.__worktime = work_time
子类继承父类并且初始化父类属性时的时候super.__init__(name)
这里少了括号,导致TypeError: descriptor '__init__' requires a 'super' object but received a 'str'
错误。修改为super().__init__(name)
即可。
②:
class Program_man(Employee):def __init__(self,name,work_time=0):super().__init__(name)self.__worktime = work_time@propertydef name(self):return self.__name@name.setterdef name(self,name):self.__name = name@propertydef worktime(self):return self.__worktime@worktime.setterdef worktime(self,worktime):self.__worktime = worktimedef get_money(self):print("程序员%s该月的工资是%.2f元"%(self.name,each_day_get*self.__worktime))
这里明明父类已经有property装饰器
获取和修改name
了,子类中已经成功继承了这些方法,不需要重新再写一次同样的方法。导致错误:AttributeError: 'Program_man' object has no attribute '_Program_man__name'
修改:将以下语句删除即可@propertydef name(self):return self.__name@name.setterdef name(self,name):self.__name = name
③:
def get_money(self):print("程序员%s该月的工资是%.2f元"%(self.__name,each_day_get*self.__worktime))
这边类中函数调用的是self.__name
,也会出现如下错误:AttributeError: 'Program_man' object has no attribute '_Program_man__name'
更改为self.name
即可。
一个类的例子--员工工资相关推荐
- 实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理涨20%.
1.实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个方法add用于涨工资,普通员工一次能涨10%,经理涨20%,具体要求如下: (1)Perso ...
- java 员工类算工资_用java设计一个员工类,可以计算工资个人所得税
用java设计一个员工类,可以计算工资个人所得税 1. 背景 老师在课上布置了几道java编程题,此为其中之一 2. 题目内容 设计一个员工类.该员工具有下列私有属性:编号,姓名,基本工资,奖金 提 ...
- 互联网晚报 | 抖音否认3月1日全国上线外卖服务;百度类ChatGPT项目定名“文心一言”;任天堂将全体员工工资统一上调10%...
抖音否认3月1日全国上线外卖服务 有媒体报道称,抖音将于3月1日上线全国外卖服务,目前已在北京.上海.成都三地进行内测.对此,抖音内部人士表示,没有"3月1日全国上线外卖服务"的计 ...
- Java黑皮书课后题第9章:9.2(Stock类)遵照9.2节中Cirlce类的例子,设计一个名为Stock的类
Java黑皮书课后题第9章:9.2(Stock类)遵照9.2节中Cirlce类的例子,设计一个名为Stock的类 题目 代码 Test2 Test2_Stock UML图 题目 代码 Test2:测试 ...
- Java黑皮书课后题第9章:9.1 (Rectangle类)遵照9.2节中Circle类的例子,设计一个名为Rectangle的类表示矩形
Java黑皮书课后题第9章:9.1 (Rectangle类)遵照9.2节中Circle类的例子,设计一个名为Rectangle的类表示矩形 题目 代码 PS Test1 Test1_Rectangle ...
- 类模板与运算符重载(一个简单的例子)
类模板与运算符重载(一个简单的例子) 标签(空格分隔): C++ 算法竞赛 下面是一段简单的代码,表示我们建立了一个类模板Vector,可以看做是对STL中vector的简单实现. 为了让这个Vect ...
- 实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定
简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口. ...
- php生成饼状图 柱形图,求一个饼状图或柱状图php生成类或例子
求一个饼状图或柱状图php生成类或例子 时间:2006/7/19 6:10:04 作者:佚名 人气:268 PHP代码:---------------------------------------- ...
- 对于‘用C#编写一个员工工资计算’问题的代码编写风格和结构设计考虑的比较【发现自己还是太弱,大家可以在评论区中提出我代码中的不足】
目录 1.'用C#编写一个员工工资计算'问题描述 2.个人思考和实现 2.1代码实现: 2.2调试结果及保存txt内容: 3.他人的实现 3.1代码实现: 3.2保存的txt内容: 1.'用C#编写一 ...
最新文章
- OpenStack 和 Cloud Foundry
- POJ 3281_Dining
- qt 在点击菜单下的动作之后获取该菜单的名称
- java求期望_Java 11的期望
- 菜鸟学习笔记:Java提升篇10(网络2——UDP编程、TCPSocket通信、聊天室案例)
- PHP三级联动视频教程,PHP教程:thinkPHP实现的省市区三级联动功能示例
- 雨敲窗python_今夜,有雨敲窗(太美了)
- Git 远程操作 —— clone、push、pull、fetch
- 图解 Elasticsearch 写入流程
- 这次要讲不清前后端分离,我都怎么地!
- 2018.9.13 贷款月供计算器
- C语言中的各种百分号都代表什么意思
- 为什么JBX写的代码在编译时,总是少字符呢?
- Python 送你一棵圣诞树
- 搬运视频怎么做成原创 | 短视频批量伪原创
- 请求转发(request对象)和重定向(response)的区别及何时使用请求转发和重定向
- php 上传 413,PHP CURL上传文件出现413 Request Entity Too Large
- Springboot2.0实现在线图片处理(自动去背景、换背景色等功能)
- 键鼠共享工具Barrier--实现linux与windows不同系统间的键鼠共享
- 应用启动失败,因为没有QT平台可以初始化
热门文章
- HDFS中的Diff类——用来描述两个集合的不同
- 【漏洞通告】微软SMBv3协议远程代码执行漏洞(CVE-2020-0796)PoC公开处置手册
- WebGIS博客文本分析(词频分析)手动扒取 去除格式 词语分割 统计分析
- Oracle经典案例
- Oracle 递归案例
- 【Linux】2、systemd 超详细介绍
- WordPress最简单无插件实现链接GO跳转美化
- Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---二)
- java批量上传图片预览_SpringMVC批量上传图片,实现上传前图片预览
- python3字符串base64编解码