Python基础学习10——类
基本概念
面向对象编程是最有效的软件编写方法之一。理解面向对象编程可以让你像程序员那样从一个更加宏观的角度去理解代码,并大大提高程序员之间的合作效率。面向对象编程的两个核心概念是对象和类
-
**对象:**对象是能帮助我们解决问题的具体东西。比如一辆汽车,一个人,也可以是一个乐高玩具。每个对象都具有各自的特征,如状态特征(属性)和行为特征(方法)。
-
**类:**类是对象共同特征的描述,他是对象的特征某种意义上的一种集合,是一种抽象上的定义。如果将对象理解为一栋楼房,那么类就相当于有是这个楼房的设计图。
在python中,我们可以根据类来创建对象。这一过程叫做实例化。通过实例化,我们可以去调用类的实例进行一系列的操作,以完成我们想要完成的任务。
类的创建与使用
类的创建
我们首先创建一个Lego类:
class Lego:def __init__(self, price, pieces, name):self.price = priceself.pieces = piecesself.name = namedef discount(self):print(f"The discountprice is {0.88*self.price}.")def time(self):print(f"The time cost is {0.4*self.pieces}mins.")
解释与说明:
-
代码第1行,class的意思是类,这种写法即表示定义了一个名字为Lego的类
-
代码第2~5行,是对类里面的属性进行初始化。init会默认被python自动调用。“self”的用途是:当python调用这个方法来创建Dog的实例的时候,会将实例自动传入self这个变量,相当于self就成为了一个实例的代表。后面的price、pieces、name都是Lego的属性,或者理解为“特点”。比如在Lego这个类中,其特点有:价格price、积木数pieces、积木名称name。注意,初始化可以给属性赋予别的值。比如,也可以这样初始化:
self.price = 0
. -
代码第7~8行,定义了第一个函数,并传入了参数self,其函数作用是输出打完八八折后的乐高价格。注意在python中我们可以使用"·"进行实例属性的调用,如self.price
-
代码第10~11行,定义了第二个函数,并传入了参数self,其函数作用是输出拼完这个乐高需要花的时间
实例的创建
依然是上面的类,我们先创建一个乐高实例:
city = Lego(398, 356, Legocity)
这样我们就得到了一个price=398,pieces=356,name=Legocity
的实例(注意self不需要单独传入参数)。
创建完实例后,我们就可以用city.price
来调用属性的值,用city.discount
来调用方法。
实例的修改
实例的属性可以直接进行修改,比如:
city.price = 698
此外,也可以在类中多加一个和修改属性相关的方法,并调用该方法进行修改。这样的方式看似繁琐,但是实际上方便后续代码修改,对于大型代码工程建议使用后者。
继承
在python中,并不是所有类都需要从头开始。有些类只是在另外一些类上进行增添修改,如果仍然将别的类的代码全部复制一遍,则会提高代码的复杂度。针对这种情况,python中有一种方式——继承,可以让一个类继承另外一个类继而可以使用那个类的所有属性和方法,而被继承的类称为父类,继承的类称为子类。
子类方法–init–的继承
我们原先的Lego类的代码里增添一个新的子类Legocity,Legocity是Lego的一种类别,所以正好有“父类”与“子类”的关系。
class Lego:def __init__(self, price, pieces, name):self.price = priceself.pieces = piecesself.name = namedef discount(self):print(f"The discountprice is {0.88*self.price}.")def time(self):print(f"The time cost is {0.4*self.pieces}mins.")class Legocity(Lego):def __init__(self, price, pieces, name):super().__init__(price, pieces, name)
解释与说明:
- 代码第13行,Legocity后面的括号内的Lego说明其继承的是Lego类
- 代码第15行,super函数是继承的关键,该函数可以调用其父类的方法,这样之后Legocity类就拥有Lego类的所有属性和方法了
给子类定义属性和方法
class Legocity(Lego):def __init__(self, price, pieces, name):super().__init__(price, pieces, name)self.legocode = 10283def printcode(self):print(f"{legocode}")
解释与说明:
-
代码第4行,作用是给子类增加了一种属性legocode。乐高每一种积木都有其特殊的编码,即legocode。
-
代码第6~7行,定义了子类一个新的方法。
注意:如果我们不想在子类中沿用父类中的某个或者某些方法,我们会对方法进行重写,即重新定义该方法即可。
导入类
我们需要使用的类可能会有很多,这时候我们会将其分文件进行书写不同的类。但是这时候就涉及到一个问题,就是如何将这些类进行导入。
导入单个类
假设我们在文件lego中有这样一些代码:
class Lego:def __init__(self, price, pieces, name):self.price = priceself.pieces = piecesself.name = namedef discount(self):print(f"The discountprice is {0.88*self.price}.")def time(self):print(f"The time cost is {0.4*self.pieces}mins.")
我们想要在另外一个文件中导入Lego类,我们可以直接:
from lego import Lego
如果该文件中有多个类,我们只想导入一个类,只要使用对应类名即可。
导入多个类
假设我们在文件lego中有这样一些代码:
class Lego:def __init__(self, price, pieces, name):self.price = priceself.pieces = piecesself.name = namedef discount(self):print(f"The discountprice is {0.88*self.price}.")def time(self):print(f"The time cost is {0.4*self.pieces}mins.")class Legocity(Lego):def __init__(self, price, pieces, name):super().__init__(price, pieces, name)self.legocode = 10283def printcode(self):print(f"{legocode}")
我们想要在另外一个文件中导入Lego类,我们可以直接:
from lego import Lego,Legocity
导入整个模块
还是上面的例子,我们可以如下写:
import lego
注意这里lego是小写,指的是文件名,大写Lego才指的是类名
使用别名
使用“as”即可
from lego import Lego as lg
这样写可以大大简约化使用长类名的复杂度,方便书写、提高效率。
相关文章:
Python基础学习10——类
基本概念 面向对象编程是最有效的软件编写方法之一。理解面向对象编程可以让你像程序员那样从一个更加宏观的角度去理解代码,并大大提高程序员之间的合作效率。面向对象编程的两个核心概念是对象和类 **对象:**对象是能帮助我们解决问题的具体东西。比如…...

项目实战典型案例14——代码结构混乱 逻辑边界不清晰 页面美观设计不足
代码结构混乱 逻辑边界不清晰 页面美观设计不足一:背景介绍问题1 代码可读性差,代码结构混乱问题2 逻辑边界不清晰,封装意识缺乏示例3.展示效果上的美观设计二:思路&方案问题一,代码可读性差,代码结构混…...

SpringBoot 读取自定义Properties参数
目录 1. 概述 2. 实现方式 2.1 Value方式 2.2 PropertySource与ConfigurationProperties相结合 3. 结束 1. 概述 最近想尝试写一个定时任务管理,相关参数不想在Spring的配置文件Application.yml或者Application.properties获取。想自己新建一个properties文件。顺…...

机器学习100天(三十七):037 朴素贝叶斯-挑个好西瓜!
《机器学习100天》完整目录:目录 机器学习100天,今天讲的是:朴素贝叶斯-挑个好西瓜! 红色石头已经了解了贝叶斯定理和朴素贝叶斯法,接下来已经可以很自信地去买瓜了。买瓜之前,还有一件事情要做,就是搜集样本数据。红色石头通过网上资料和查阅,获得了一组包含 10 组样…...
c#遍历窗口,根据标题获取handle并显示窗口
using System.Runtime.InteropServices;using System.Text;//1,定义//[DllImport("User32.dll", EntryPoint "FindWindow")]//public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll…...

MyBatis高频面试专题
一、介绍下MyBatis中的工作原理 1。介绍MyBatis的基本情况:ORM 2。原理: MyBatis框架的初始化操作处理SQL请求的流程 1.系统启动的时候会加载解析全局配置文件和对应映射文件。加载解析的相关信息存储在 Configuration 对象 Testpublic void test1(…...

曹云金郭德纲关系迎曙光,新剧《猎黑行动》被德云社弟子齐点赞
话说天下大势,分久必合,合久必分。这句话经过了历史的证明,如今依然感觉非常实用。 就拿郭德纲和曹云金来说,曾经后者是前者的得门生,两个人不但情同父子,曹云金还是郭德纲默认接班人。然而随着时间的流逝&…...

如何在 OpenEuler 系统中安装 Docker
Docker 是一种流行的开源容器化平台,它能够将应用程序与其依赖项打包成可移植的容器,从而简化了应用程序的部署和管理。本文将介绍在 OpenEuler 系统中安装 Docker 并使用 Docker 容器控制 5G 模块的具体步骤。 安装 Docker 安装 Docker 的具体步骤如下…...

MySQL日志管理
日志管理在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这种时候,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了数据库中数据丢失或被破坏可能原因:误删除数据库数据库工作时&a…...
进 制
进制进制一、进制概念二、进制的转换三、二进制的运算3.1 与运算3.2 或运算3.3 非运算3.4 异或运算3.5 位运算(位移)四、原码、反码、补码4.1 原码4.2 反码4.3 补码五、浮点数十进制转换成二进制进制 一、进制概念 十进制是指逢十进一。 计算机中二进制…...

pycharm关联github、新建以及更新仓
此处已经默认你安装了git以及pycharm,这篇文章将会教给大家如何利用pycharm管理自己的github. 目录 pycharm关联github设置 Github创建新的仓 仓库的更新 pycharm:2022。不同版本界面略有不同。 pycharm关联github设置 设置PyCharm,打开File --> Settings -…...
java基础知识之小碎片(自问自答版本)---嘻嘻,春招加油呀~
1.public/private/protected/default的区别? public:对所有类可见 private 只有类本身可以访问,其他类想访问可以通过该类的成员方法访问如getter/setter protected:对同一包内的类和所有子类可见 default:在同一包内可见,不加修饰符 2.jav…...
蚁群算法c++
//轮盘赌选择下一步行进城市 int citySelect(int k, int f) { int c 0;//记录蚂蚁可行进的城市个数 //1、计算可行进的各城市 选择概率 for (int m 0; m < cityNum; m) { //若城市(i,j)之间有路且j不在蚂蚁k的禁忌表中…...

北大青鸟天府校区IT学习大揭秘
口罩已放开,一切都要重新出发。 开年才一个多月,已经有很多小伙伴想培训转行IT行业或者已经在咨询、报名培训IT技术。作为老牌培训机构,也有很多小伙伴相信我们,选择了我们。很感谢大家的信任,作为老牌培训机构&#…...
04 Linux errno.h错误码中文注释
Linux错误码中文注释 作者将狼才鲸创建日期2023-03-04/******************************************************************************* \brief 错误码* \note 基于linux_6.1-rc4\include\uapi\asm-generic\errno-base.h* linux_6.1-rc4\tools\arch\alpha\include\uapi…...
MySQL表的约束
文章目录表的约束空属性默认值列描述zerofill主键自增长唯一键外键表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如说我们的居民…...

Go语言的条件控制语句及循环语句的学习笔记
一、Go的条件控制语句 Go 语言提供了以下几种条件判断语句: 语句描述if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。if 嵌套语句你可以在 if 或…...

D. Linguistics(思维 + 贪心)
Problem - D - Codeforces Alina发现了一种奇怪的语言,它只有4个单词:a, B, AB, BA。事实也证明,在这种语言中没有空格:一个句子是通过将单词连接成一个字符串来写的。Alina发现了一个这样的句子,她很好奇:有没有可能它恰好由a个单词a, b个单…...
maxWell数据迁移
目录 1.开启mysql的binlog 1.1: Statement-based 1.2: Row-based 1.3: mixed 2. 重启mysql服务 3. 创建Maxwell所需数据库和用户 4. 配置Maxwell 5. Maxwell启停(实时同步) 6. 历史数据全量同步 这里使用maxWell对mysql数据迁移到kafka中 官网下载地址点击下载 注&#x…...

混合图像python旗舰版
仔细看这个图像。然后后退几米再看。你看到了什么?混合图像是指将一张图片的低频与另一张图片的高频相结合的图片。根据观看距离的不同,所得到的图像有两种解释。在上面的图片中,你可以看到阿尔伯特爱因斯坦,一旦你离开屏幕或缩小…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...