|
|
发表于 2023-12-26 14:28:12
|
显示全部楼层
问答题:
0. Python 是如何体现面向对象的多态特性的?
通过重写的方式,重写了类的方法。
1. 多态的优势是什么?
在不影响类的属性的基础上,可以重新修改类的方法。
2. 请问在 Python 中,1+1 == 2 跟 '1' + '1' == '11',这种根据操作数类型不同,得到不同结果的现象,可以称为多态吗?
可以
3. 关于鸭子类型这个名字的来源,有一句谚语,你知道是什么吗?
一只鸟长得像鸭子,叫声像鸭子,走路也像鸭子,那它就是鸭子
4. 高内聚低耦合,是判断软件设计好坏的标准。在程序设计中,我们都希望尽可能做到高内聚(内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系)和低耦合(耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据)。那么请问,使用鸭子类型,是增强了内聚呢,还是降低了耦合度呢?
高内聚
5. 请问下面代码的执行结果,是属于 Python 的多态现象吗?
不是
动动手:
#员工属性
class Users:
def __init__(self,name,job,grade,year,uid):
#姓名
self.name=name
#职位
self.job=job
#级别
self.grade=grade
#工龄
self.year=year
#工号
self.uid=uid
#获取工号
def get_uid(self):
return self.uid
#获取姓名
def get_name(self):
return self.name
#获取职位
def get_job(self):
return self.job
#获取级别
def get_grade(self):
return self.grade
#获取工龄
def get_year(self):
return self.year
#计算工资
class Money:
def salary(self,job,grade,year):
if job=="E":
money=3000+500*grade+50*year
elif job=="T":
money=4000+800*grade+100*year
elif job=="M":
money=5000+1000*(grade+year)
return money
class Action(Money):
def __init__(self):
self.users={}
self.no=10000
#启动程序
def begin(self):
a=0
while a !="5":
a=input("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
if a=="1":
self.insert()
elif a=="2":
self.search()
elif a=="3":
self.up()
elif a=="4":
self.down()
elif a=="5":
break
#录入
def insert(self):
name=input("姓名:")
job=input("职位(E.普通员工;T.组长;M.经理):")
year=int(input("工龄:"))
grade=int(input("级别:"))
if job=="E":
if grade >10 or grade <1:
grade=int(input("该职位最高级别为10,请重新录入级别:"))
elif job=="T":
if grade >6 or grade <1:
grade=int(input("该职位最高级别为6,请重新录入级别:"))
elif job=="M":
if grade >3 or grade <1:
grade=int(input("该职位最高级别为3,请重新录入级别:"))
uid=self.no
self.users[self.no]=Users(name,job,grade,year,uid)
money=self.salary(job,grade,year)
print(f"录入成功!姓名:{name},工号:{uid},薪资:{money}")
self.no+=1
#查询
def search(self):
whichsearch=input("1.员工查询;2.职位查询:")
if whichsearch =="1":
uid=int(input("请输入工号:"))
if not self.users.get(uid):
print("该工号不存在!")
else:
print(f"姓名:{self.users[uid].name}")
print(f"职位:{self.users[uid].job}")
print(f"级别:{self.users[uid].grade}")
print(f"工龄:{self.users[uid].year}")
print(f"薪资:{self.salary(self.users[uid].job,self.users[uid].grade,self.users[uid].year)}")
if whichsearch =="2":
job=input("职位(E.普通员工;T.组长;M.经理):")
total=0
for i in self.users:
if self.users[i].job==job:
total+=1
if total==0:
if job=="E":
print(f"目前公司没有普通员工!")
elif job=="T":
print(f"目前公司没有组长!")
elif job=="M":
print(f"目前公司没有经理!")
else:
print(f"目前普通员工共有{total}人:")
for i in self.users:
if self.users[i].job==job:
print(f"{self.users[i].uid} - {self.users[i].name}")
#升级
def up(self):
uid=int(input("请输入工号:"))
print(f"{self.users[uid].name},工号:{uid},当前职位:{self.users[uid].job}{self.users[uid].grade},当前薪资:{self.salary(self.users[uid].job,self.users[uid].grade,self.users[uid].year)}")
new=int(input("请输入需要增加的级别:"))
if self.users[uid].job=="E":
if self.users[uid].grade+new <=10:
newgrade=self.users[uid].grade+new
if self.users[uid].grade+new >10 and self.users[uid].grade <17:
newgrade=1
newjob="T"
if self.users[uid].grade+new >=17:
newgrade=1
newjob="M"
elif self.users[uid].job=="T":
if self.users[uid].grade+new <=6:
newgrade=self.users[uid].grade+new
if self.users[uid].grade+new >6:
newgrade=1
newjob="M"
elif self.users[uid].job=="M":
newgrade=self.users[uid].grade+new
print("升级成功!")
print(f"{self.users[uid].name},工号:{uid},升级后职位:{newjob}{newgrade},升级后的薪资:{self.salary(newjob,newgrade,self.users[uid].year)}(+{self.salary(newjob,newgrade,self.users[uid].year)-self.salary(self.users[uid].job,self.users[uid].grade,self.users[uid].year)})")
self.users[uid].job=newjob
self.users[uid].grade=newgrade
#降级
def down(self):
uid=int(input("请输入工号:"))
print(f"{self.users[uid].name},工号:{uid},当前职位:{self.users[uid].job}{self.users[uid].grade},当前薪资:{self.salary(self.users[uid].job,self.users[uid].grade,self.users[uid].year)}")
new=int(input("请输入需要减少的级数:"))
if self.users[uid].job=="E":
if self.users[uid].grade-new <=0:
newgrade=self.users[uid].grade-new
elif self.users[uid].job=="T":
if self.users[uid].grade+10-new >10:
newgrade=self.users[uid].grade-new
if self.users[uid].grade+new <=10:
newgrade=10
newjob="E"
elif self.users[uid].job=="M":
if self.users[uid].grade+16-new>16:
newgrade=self.users[uid].grade-new
if self.users[uid].grade+16-new>10 and self.users[uid].grade+16-new<=16:
newgrade=6
newjob="T"
if self.users[uid].grade+16-new<=10:
newgrade=10
newjob="E"
print("降级成功!")
print(f"{self.users[uid].name},工号:{uid},降级后职位:{newjob}{newgrade},降级后的薪资:{self.salary(newjob,newgrade,self.users[uid].year)}({self.salary(newjob,newgrade,self.users[uid].year)-self.salary(self.users[uid].job,self.users[uid].grade,self.users[uid].year)})")
self.users[uid].job=newjob
self.users[uid].grade=newgrade
def main():
m=Action()
m.begin()
|
|