python教程:如何写类?

news2025/2/23 2:43:15

目录标题

    • 前言
      • 类的定义
      • 知识点扩展:
        • 构建和初始化
        • 1. __ new__(cls,[…)
        • 2. __ init__(self,[…)
        • 3. __ del__(self)
      • 尾语

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

类的定义

Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类:

class Student(object):
pass

class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。

通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现的:

>>> bart = Student()
>>> bart
<__main__.Student object at 0x10a67a590>
>>> Student
<class '__main__.Student'>

可以看到,变量bart指向的就是一个Student的实例,后面的0x10a67a590是内存地址,每个object的地址都不一样,而Student本身则是一个类。

可以自由地给一个实例变量绑定属性,比如,给实例bart绑定一个name属性:

>>> bart.name = 'Bart Simpson'
>>> bart.name
'Bart Simpson'

这点与静态语言,比如C++是不一样的。我们可以随时给一个对象添加属性。

在python中,类的属性就等同于c++类的成员变量,类的方法等同于c++类的成员函数。

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。

通过定义一个特殊的init方法,在创建实例的时候,就把name,score等属性绑上去:

class Student(object):
def __init__(self, name, score):
	self.name = name
	self.score = score

对比c++,__init__函数就等同于c++类得构造函数,注意:特殊方法“init”前后有两个下划线。

注意到init方法的第一个参数永远是self,表示创建的实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。

有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:

>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,

并且,调用时,不用传递该参数。

除此之外,类的方法和普通函数没有什么区别,

所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。

我们可以给我们定义的Student类增加新的方法,比如get_grade:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Student(object):
 
...
 
def get_grade(self):
	if self.score >= 90:
		return 'A'
	elif self.score >= 60:
		return 'B'
	else:
		return 'C'

知识点扩展:

构建和初始化

相信大家都熟悉这个最基础的神奇方法 __ init__。

它令你能自定义一个对象的初始化行为。

而当我调用x=SomeClass() 时,__ init__ 并不是最先被调用的。

实际上有一个叫做__ new__的方法,事实上是它创建了实例,它传递任何参数给初始化程序来达到创建的目的。

在对象生命周期结束时,调用 __ del__。

让我们更近地观察下这 3 个神奇方法吧:

1. __ new__(cls,[…)

一个对象的实例化时 __ new__ 是第一个被调用的方法。

在类中传递其他任何参数到 __ init__。__new__很少被使用,这样做确实有其目的,特别是当一个子类继承一个不可改变的类型(一个元组或一个字符串)时。

我不打算再继续深入追求 __ new __ 的细节了,因为这不会产生多大用处,因为在 Python Docs 内已经涵盖了一份巨详细的说明了。

2. __ init__(self,[…)

类的初始化。

它会获得初始构建调用传过来的任何东西(举例来说就是,当我们调用x=SomeClass(10,'foo'),__ init__ 就会把传过来的 10 和 ‘foo’ 作为参数。

__init__在 Python 的类定义中几乎普遍被使用)

3. __ del__(self)

如果 __ new__和 __ init__ 是对象的构造器,那么 __ del__ 就是析构器。

它不实现声明为del x(这样的代码不会解释成 x.__ del__())的行为。

相反,它定义为当一个对象被垃圾回收时的行为。

这可能对可能需要额外清理的对象相当有用,比如 sockets 或文件对象。

但要小心,如果对象仍处于存活状态而当被解释退出时,__ del__ 没有保证就会被执行,因此这样的__ del__ 不能作为良好的编码规范的替代。

(就像当你完成操作总是要关闭一次连接。但事实上,__ del__ 几乎永远不会执行,就因为它处于不安全情况被调用了。使用时保持警惕!)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

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

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

相关文章

正中优配:A股早盘三大股指微涨 华为概念表现活跃

周三&#xff08;8月30日&#xff09;&#xff0c;到上午收盘&#xff0c;三大股指团体收涨。其间上证指数涨0.06%&#xff0c;报3137.72点&#xff1b;深证成指和创业板指别离涨0.33%、0.12%&#xff1b;沪深两市合计成交额6423.91亿元&#xff0c;总体来看&#xff0c;两市个…

一文搞懂CAN和CAN FD总线协议

一、CAN与CAN FD的概念 1、CAN是什么 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;是一种用于实时应用的串行通讯协议总线&#xff0c;它可以使用双绞线来传输信号&#xff0c;是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种…

正中优配:创业板怎么开通

作为我国资本市场的一个重要组成部分&#xff0c;股票市场一直是出资者追逐高收益的抢手挑选。而近年来&#xff0c;创业板作为我国股票市场上的一颗新星&#xff0c;备受创业者、出资者的关注。但关于一些新手出资者来说&#xff0c;可能对“创业板怎样注册”这个问题还比较陌…

一文看懂开发者需要了解的信创概念

信创这个概念对于大家来说并不陌生&#xff0c;至少我们在海量的新闻中会时不时的听到这个概念&#xff0c;特别是在西方国家对中国进行技术封锁加剧时&#xff0c;证券市场中它还会时不时成为一个风口板块。 其实“信创”理解起来也并不困难&#xff0c;就像它的字面意思&…

手把手教你Jenkins整合Jmeter实现自动化接口测试

01、在机器上安装jmeter 下载&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本&#xff0c;启动前修改jmeter.properties 中 jmeter.save.saveservice.output_format值为xml。 编写接口测试脚本&#xff1a; …

外贸软件鞋类行业管理难点及解决方案

鞋子作为一种常见的商品&#xff0c;在出口外贸中占据着重要的地位。近几年&#xff0c;随着我国经济的建设步伐的不断加快&#xff0c;对外贸易活跃度也随之得以提升&#xff0c;中产阶层的消费人群及需求量都在不断增长&#xff0c;其中鞋业也经历了急剧的发展&#xff0c;成…

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…

C# 如何将使用的Dll嵌入到.exe应用程序中?

文章目录 前言详细实操简要步骤 前言 有没有想自己开发的exe保留一点神秘&#xff0c;不想让他人知道软件使用了哪些dll; 又或许是客户觉得一个软件里面的dll文件太多了&#xff0c;能不能简单一点&#xff0c;直接双击.exe就可以直接运行了&#xff0c;别搞那么多乱七八糟的。…

Android开发仿美团购物左右联动列表

概述 Android开发左右联动列表&#xff0c;仿照美团外卖点餐时&#xff0c;左右列表可以联动。 详细 Android开发仿美团购物左右联动列表 概述 左右联动列表是仿照美团外卖点餐时&#xff0c;左右列表可以联动。比如右边列表会有小项对应左边的&#xff0c;滑动时会置顶&a…

数字IC验证高频面试问题整理—附答案(三)

最近大家无不在讨论IC秋招&#xff0c;秋招想必缺的就是面试题目了。这不就来了~ 共150道验证高频面试题整理~含答案&#xff08;文末可领取全部题目&#xff09; Q1.二进制码、格雷码、独热码的特点 二进制码&#xff1a;基本的机器语言&#xff0c;每一位只能是0或1&…

K8s:一文带你认知 CRI,OCI,容器运行时,Pod 之间的关系

写在前面 博文内容整体结构为结合 华为云云原生课程 整理而来,部分内容做了补充课程是免费的&#xff0c;有华为云账户就可以看&#xff0c;适合理论认知&#xff0c;感觉很不错。有需要的小伙伴可以看看&#xff0c;链接在文末理解不足小伙伴帮忙指正 对每个人而言&#xff0c…

<硬件设计> 阻抗设计(一) 阻抗及其模型介绍

目录 01 阻抗相关介绍 阻抗(Electrical Impedance) 阻抗匹配(Impedance Matching) 常规的阻抗线(Impedance Matching) 02 微带线与带状线 微带线(MicroStrip) 带状线(Stripline) 03 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软件工程师。 在…

mysql8.0以上忘记密码的重置方法 - window系统

1、关闭 mysql 服务&#xff0c;以 管理员身份 运行命令提示符工具&#xff0c;执行下面的命令 net stop mysql可以在任务管理器的服务中查看状态 2、跳过 mysql 权限验证&#xff0c;以管理员身份运行 cmd&#xff0c;进入 mysql 的安装 bin 目录&#xff0c;执行如下指令 m…

另一棵树的子树

目录 题目题目要求示例 解答方法一、实现思路时间复杂度和空间复杂度代码 方法二、实现思路时间复杂度和空间复杂度代码 题目 另一棵树的子树 题目要求 题目链接 示例 解答 方法一、 递归法 实现思路 依次将树中的每一棵子树都与目标树比较&#xff0c;如果有子树与目标…

树多选搜索查询,搜索后选中状态仍保留

<template><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input v-model&qu…

使用gn+Ninja构建项目

使用下载编译好的gn和ninja报错 先下载了gn的源码[gn.googlesource.com/gn]&#xff0c;然后编译报错&#xff0c;就直接下载了了编译号的gn和Ninja&#xff0c;然后写了Helloworld应用的BUILD.gn&#xff0c;然后将"gn\examples\simple_build\build"拷贝至当前目录…

Qt之遮罩—实现不规则窗体

Qt之setMask() 前言 使用遮罩可以将窗口形状多样化&#xff0c;变成各种各样的图片或者图形&#xff0c;先看一下效果吧&#x1f447; 可以看到现在的窗口是一束花&#xff0c;而我们拖动花就相当于拖动窗口&#xff0c; setMask()只是说可以让哪些地方可见哪些地方不可见其…

Doris最大链接数优化

问题背景&#xff1a; 用户在使用Doris的时候&#xff0c;当访问用户过多时会报Reach limit of connections&#xff0c;针对这种情况需要调整Doris最大连接数&#xff0c;具体做法如下。 解决办法&#xff1a; Session变量设置 SET PROPERTY FOR root max_user_connection…

网络优化工程师,你真的了解吗?

一、5G网络优化工程师到底是什么&#xff1f; 5G&#xff0c;就是我们通常所说的第五代移动通信标准&#xff0c;属于目前最热门的新技术趋势。随着2019年5G技术进入正式的商用阶段&#xff0c;拥有广阔的发展前景&#xff0c;备受瞩目。“5G工程师”这个词是一个概念词&#x…

新增!视频智能分析/AI算法智能分析网关V5告警功能添加教程来咯!

智能分析网关系列是基于边缘AI计算技术&#xff0c;可对前端摄像头采集的视频流进行实时检测分析&#xff0c;能对监控画面中的人、车、物进行识别&#xff0c;可实现的检测包括&#xff1a;人脸检测与识别、车辆检测与识别、烟火识别、安全帽/反光衣识别、区域入侵识别等&…