python-18-零基础自学python 类和子类的基础练习

学习内容:《python编程:从入门到实践》第二版

知识点:

类,父类与子类的继承,调用函数方法等。

练习内容:

练习9-7:管理员 管理员是一种特殊的用户。编写一个名为Admin的类,让它继承为完成练习9-3或练习9-5而编写的User类。添加一个名为privileges的属性,用于存储一个由字符串(如"can add post"、"can delete post"、"can ban user"等)组成的列表。编写一个名为show_privileges()的方法,显示管理员的权限。创建一个Admin实例,并调用这个方法。

练习9-8:权限 编写一个名为Privileges的类,它只有一个属性privileges,其中存储了练习9-7所述的字符串列表。将方法show_privileges()移到这个类中。在Admin类中,将一个Privileges实例用作其属性。创建一个Admin实例,并使用方法show_privileges()来显示其权限。

练习9-9:电瓶升级 在本节最后一个electric_car.py版本中,给Battery类添加一个名为upgrade_battery()的方法。该方法检查电瓶容量,如果不是100,就将其设置为100。创建一辆电瓶容量为默认值的电动汽车,调用方法get_range(),然后对电瓶进行升级,并再次调用get_range()。你将看到这辆汽车的续航里程增加了。

我的代码&运行结果:

class User:def __init__(self,first_name,last_name,age,job):self.first_name = first_nameself.last_name = last_nameself.age = ageself.job = jobdef describe_user(self):print(f"用户信息如下:")print(f"姓名:{self.first_name} {self.last_name}")print(f"年龄:{self.age}")print(f"职业:{self.job}")def greet_user(self):print(f"Hello, {self.first_name} {self.last_name}\n")class Admin(User):def __init__(self,first_name,last_name,age,job):super().__init__(first_name,last_name,age,job)def show_privileges(self):privileges =["can add post","can delete post","can ban user"]for privilege in privileges:print(f"the adminer's privileges :{privilege}")admin1 = Admin('朱','大','10','学生')
admin1.describe_user()
admin1.greet_user()
admin1.show_privileges()

练习

class User:def __init__(self,first_name,last_name,age,job):self.first_name = first_nameself.last_name = last_nameself.age = ageself.job = jobdef describe_user(self):print(f"用户信息如下:")print(f"姓名:{self.first_name} {self.last_name}")print(f"年龄:{self.age}")print(f"职业:{self.job}")def greet_user(self):print(f"Hello, {self.first_name} {self.last_name}\n")class Privileges:def show_privileges(self):privileges =["can add post","can delete post","can ban user"]for privilege in privileges:print(f"the adminer's privileges :{privilege}")class Admin(User):def __init__(self,first_name,last_name,age,job):super().__init__(first_name,last_name,age,job)self.privileges = Privileges()admin1 = Admin('朱','大','10','学生')
admin1.describe_user()
admin1.greet_user()
admin1.privileges.show_privileges()

 

练习

class Car:"""一次模拟汽车的简单尝试。"""def __init__(self,make,model,year):self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):long_name = f"{self.year} {self.make} {self.model}"return long_name.title()def read_odometer(self):print(f"This car has {self.odometer_reading} miles on it.")def update_odometer(self,mileage):if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self,miles):self.odometer_reading += milesclass Battery:def __init__(self,battery_size=90):self.battery_size = battery_sizedef describe_battery(self):print(f"This car has a {self.battery_size}-kWh battery.")def upgrade_battery(self):if self.battery_size != 100:self.battery_size = 100#print(f"This car has updated, with a {self.battery_size}-kWh battery.")class ElectricCar(Car):def __init__(self,make,model,year):super().__init__(make,model,year)self.battery = Battery()#注意这里的self.battery 和class battery里面的self.battery_size弄混淆了!my_tesla = ElectricCar('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.upgrade_battery()my_tesla.battery.describe_battery()

总结&问题:

1.每一个类里面的属性名字切记不能混淆

2.def __init__(self,battery_size=90)新增属性的原始值,可在定义的时候给出,可以先不写出

3.super().__init__(make,model,year)继承时,什么时候有self,super后的()等细节容易错

4.self.battery = Battery()子类和某一特性单独建立的类之间一定不能忘记这部分联系。

5.my_tesla.battery.describe_battery()调用函数时,不能忘记中间需要加上类的名字再加点。后在加方法。

6.=是等于、赋值,==等于是比较,!=是比较

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游泳耳机入耳式好还是骨传导好?游泳教练力荐实力卓绝的四大热款

作为一名长期致力于游泳爱好者健康与运动体验提升的专业教练,我深知在水中听音乐的魅力,同时也深知选择正确的耳机对于水上运动的重要性。近年来,市场上的游泳耳机类型日益丰富,其中入耳式和骨传导两大主流各有千秋。今天&#xf…

springcloud第4季 分布式事务seata作用服务搭建1

一 seata作用 1.1 seata简介 1.seata是一款解决分布式事务的解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 1.2 seata的术语 一个中心:全局事务id,xid,在调用服务链路的上下文中进行传播。TC(Transa…

界面控件Telerik UI for Winforms 2024 Q2新版亮点 - 发布全新的AI相关组件

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件,所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for Winform…

高效导航:Symfony路由组件的高级应用揭秘

🌐 高效导航:Symfony路由组件的高级应用揭秘 🚀 在Symfony框架中,路由是应用程序的神经系统,负责将用户的请求导向正确的控制器。Symfony的路由组件不仅功能强大,而且提供了许多高级用法,以满足…

golang项目基于gorm框架从postgre数据库迁移到达梦数据库的实践

一、安装达梦数据库 1、登录达梦数据库官网,下载对应系统版本的安装包。 2、下载地址为:https://www.dameng.com/list_103.html 3、达梦数据库对大小写敏感,在安装初始化数据库实例时建议忽略大小写;具体安装教程可参考以下博客: …

php中闭包(Closure)的bindTo函数用法

Closure::bindTo 是 PHP 中的一个方法,用于改变闭包(Closure)内部的 $this 上下文以及其静态范围。这意味着你可以将一个闭包从一个对象或类绑定到另一个对象或类上,使其在调用时使用新的上下文。这对于在不同的对象实例间复用闭包…

C++02 变量和基本类型

基本类型 字、字节、bit、Byte之间的关系 字 word 字节 Byte 位 bit 1字 2字节 <---> 1word 2Byte 1字节 8位 <---> 1Byte 8bit 1Byte 8bits 1KB 1024Bytes 1MB 1024KB 1GB 1024MB #include <iostream> using namespace std; int main() {/*字符…

Brand Finance Retail 100 2024

近日,全球领先的品牌价值评估咨询机构Brand Finance发布了其年度行业研究报告——《Brand Finance Retail 100 2024》。该报告深入分析了全球最有价值的零售品牌及其品牌实力,揭示了品牌价值的变化趋势和品牌强度的排名情况。报告指出,尽管许多顶级零售品牌在品牌价值上遭遇了下…

deepspeed docker集群实现多机多卡训练----问题记录及解决方案资源汇总

. Docker中实现Deepspeed多机多卡训练 【掘金-雨田君的记事本】docker容器中deepspeed多机多卡集群分布式训练大模型 . 问题记录及解决方案资源汇总 问题1&#xff1a;deepspeed socketStartConnect: Connect to 172.18.0.3<54379> failed : Software caused connectio…

表达式求值的相关语法知识(C语言)

目录 整型提升 整型提升的意义 整型提升规则 整型提升实例 算术转换 赋值转换 操作符的属性 C语言的语法并不能保证表达式的执行路径唯一&#xff01;&#xff01;&#xff01; 问题表达式 整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这…

Cesium 坐标转换

屏幕坐标、固定坐标、惯性坐标转换 Cesium版本1.118.2 //屏幕坐标转固定坐标 let position viewer.scene.pickPosition(movement.endPosition) //当前时间 const now viewer.clock.currentTime //固定系坐标 const pointInFixed position //转换阵 const fixedToIcrf C…

Linux kernel启动initramfs

制作文件系统 用busybox制作文件系统&#xff0c;过程忽略。制作完成后进入rootfs目录&#xff0c;执行&#xff1a; ln -s /bin/busybox init 配置内核 打开配置菜单&#xff0c;这里只需要配置两个配置项&#xff1a; General setup–>选择 Initial RAM filesystem and…

昇思25天学习打卡营第8天 | 保存与加载 使用静态图加速

保存与加载 在训练网络模型的过程中&#xff0c;实际上我们希望保存中间和最后的结果&#xff0c;用于微调&#xff08;fine-tune&#xff09;和后续的模型推理与部署&#xff0c;下面是介绍如何保存与加载模型。 先定义一个模型用&#xff1a; import numpy as np import m…

每个 Node.js 开发人员都应该知道的13个库(上)

1. Sequelize Sequelize是一个基于promise的Node.js对象关系映射器&#xff08;ORM&#xff09;&#xff0c;它使开发人员更容易使用关系数据库。 支持PostgreSQL&#xff0c;MySQL&#xff0c;MariaDB&#xff0c;SQLite和更多数据库。 Sequelize使用JavaScript对象对数据库…

@PathVariable注解的使用及源码解析

前言 PathVariable 注解是我们进行JavaEE开发&#xff0c;最常见的几个注解之一&#xff0c;这篇博文我们以案例和源码相结合&#xff0c;帮助大家更好的了解PathVariable 注解 使用案例 1.获取 URL 上的值 RequestMapping("/id/{id}") public Object getId(Path…

【5000论文】基于大数据的电影数据可视化系统设计与实现论文分享

论文框架免费分享&#xff0c;代码收费&#xff0c;有需要可以联系我&#xff5e; 基于大数据的电影数据可视化系统设计与实现 摘要&#xff1a;本论文深入探讨了基于大数据的电影数据可视化系统的设计与实现。在电影产业数字化进程加速、数据量急剧增长的背景下&#xff0c;…

如何学习Vue?

要学习Vue&#xff0c;可以按照以下步骤&#xff1a; 熟悉HTML、CSS和JavaScript的基础知识。Vue是一个JavaScript框架&#xff0c;所以了解JavaScript的基础知识是必要的。 了解Vue的基本概念和语法。可以通过阅读Vue的官方文档来学习Vue的相关知识。Vue的官方文档提供了详细…

【Python机器学习】单变量非线性变换

添加特征的平方或立方可以改进线性回归模型&#xff0c;其他变换通常也对变换某些特征有用&#xff0c;特别是应用数学函数&#xff0c;比如log、exp、sin等。虽然基于树的模型只关注特征的顺序&#xff0c;但是线性模型和神经网络依赖于每个特征的尺度和分布。如果在特征和目标…

JAVA实现PDF转HTML文档

本文是将PDF文档转PNG图片,然后进行图片拼接&#xff0c;拼接后的图片转为base64字符串&#xff0c;然后拼接html文档&#xff08;再写入html文件&#xff09;。 引入maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency&g…

首次线下联合亮相!灵途科技携手AEye、ATI亮相2024 EAC 易贸汽车产业大会

6月22日&#xff0c;2024 EAC 易贸汽车产业大会在苏州国际博览中心圆满落幕&#xff0c;泛自动驾驶领域光电感知专家灵途科技携手自适应高性能激光雷达解决方案全球领导者AEye公司&#xff08;NASDAQ:LIDR&#xff09;及光电器件规模化量产巨头Accelight Technologies&#xff…