Python基础之面向对象 - 三大特征练习

📅 2026/7/24 12:47:02
Python基础之面向对象 - 三大特征练习
题目1车辆租赁计费系统背景实现不同车型的租赁费用计算。父类Vehicle包含私有属性_base_rate日基础租金和_rent_days租的天数。方法calculate_cost()返回基础租金×天数。子类Car额外收取每天50元保险费重写calculate_cost()。Truck基础租金×天数 每公里5元公里数作为额外参数传入因此重写calculate_cost(km)。封装_base_rate只能通过构造函数设置不能直接修改。提供set_rent_days()方法修改租车的天数。创建Car和Truck对象测试classVehicle:def__init__(self,base_rate,rent_days):self._base_ratebase_rate self._rent_daysrent_daysdefcalculate_cost(self):returnself._base_rate*self._rent_daysdefset_rent_days(self,rent_days):self._rent_daysrent_daysclassCar(Vehicle):defcalculate_cost(self):returnsuper().calculate_cost()50*self._rent_daysclassTruck(Vehicle):def__init__(self,base_rate,rent_days,km):Vehicle.__init__(self,base_rate,rent_days)self.kmkmdefcalculate_cost(self):returnsuper().calculate_cost()5*self.km# 测试cCar(100,3)tTruck(200,5,200)print(car的租金:,c.calculate_cost())print(trunk的租金:,t.calculate_cost())# lst [c,t]# for i in lst:# print(i.calculate_cost())题目2游戏角色职业系统背景RPG游戏中角色有多种能力来源。要求创建三个基类战士Fighter包含属性__strength力量值、提供attack()方法输出“物理攻击”法师Mage包含属性__intelligence智力值、提供cast_spell()方法输出“火球术”医师Healer包含__wisdom智慧值、提供heal()方法输出“治疗术”。每个类都有get_power()方法返回不同数值战士返回力量值法师返回智力值等。创建子类Paladin圣骑士同时继承Fighter和Healer重写get_power()为(力量×0.6 智慧×0.4)。并拥有自己的holy_light()技能输出“圣光普照”。创建子类Spellblade魔剑士同时继承Fighter和Mage重写get_power()为(力量×0.5 智力×0.5)重写attack()为先施放一个附加魔法效果再物理攻击调用两个父类对应方法。多态定义一个函数show_power(character)调用其get_power()。演示不同角色传入时得到不同计算方式。封装每个角色的力量/智力等属性设为私有通过getter访问。# 战士classFighter:def__init__(self,strength):self.__strengthstrengthdefattack(self):print(物理攻击)defget_power(self):returnself.__strengthpropertydefstrength(self):returnself.__strength# 法师classMage:def__init__(self,intelligence):self.__intelligenceintelligencedefcast_spell(self):print(火球术)defget_power(self):returnself.__intelligencepropertydefintelligence(self):returnself.__intelligence# 医师classHealer:def__init__(self,wisdom):self.__wisdomwisdomdefheal(self):print(治疗术)defget_power(self):returnself.__wisdompropertydefwisdom(self):returnself.__wisdom# 创建子类# 圣骑士classPaladin(Fighter,Healer):def__init__(self,strength,wisdom):# 分别调用不同父类的初始化方法为从不同父类继承的实例属性初始化Fighter.__init__(self,strength)Healer.__init__(self,wisdom)defget_power(self):returnself.strength*0.6self.wisdom*0.4defholy_light(self):print(圣光普照)# 魔剑士classSpellblade(Fighter,Mage):def__init__(self,strength,intelligence):Fighter.__init__(self,strength)Mage.__init__(self,intelligence)defget_power(self):return(self.strengthself.intelligence)*0.5defattack(self):Mage.cast_spell(self)Fighter.attack(self)# 测试defshow_power(character):print(能力:,character.get_power())pPaladin(1000,90)sSpellblade(2000,100)show_power(p)show_power(s)p.attack()s.attack()