当前位置: 首页 > news >正文

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) { //若城市&#xff08;i,j&#xff09;之间有路且j不在蚂蚁k的禁忌表中&#xf…...

北大青鸟天府校区IT学习大揭秘

口罩已放开&#xff0c;一切都要重新出发。 开年才一个多月&#xff0c;已经有很多小伙伴想培训转行IT行业或者已经在咨询、报名培训IT技术。作为老牌培训机构&#xff0c;也有很多小伙伴相信我们&#xff0c;选择了我们。很感谢大家的信任&#xff0c;作为老牌培训机构&#…...

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主键自增长唯一键外键表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如说我们的居民…...

Go语言的条件控制语句及循环语句的学习笔记

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

D. Linguistics(思维 + 贪心)

Problem - D - Codeforces Alina发现了一种奇怪的语言&#xff0c;它只有4个单词:a, B, AB, BA。事实也证明&#xff0c;在这种语言中没有空格:一个句子是通过将单词连接成一个字符串来写的。Alina发现了一个这样的句子&#xff0c;她很好奇:有没有可能它恰好由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旗舰版

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

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...