python教程:如何写类?

超详细!Python 类 Class--详细整理 并且,Python 中也没有真正的私有属性,只有一种约定俗成的方法来模拟私有属性的效果,这也是 Python 的一种“鸭子类型”的体现。类方法可以访问类的私有属性,也可以修改。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。 阅读详情

前言

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

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__ 几乎永远不会执行,就因为它处于不安全情况被调用了。使用时保持警惕!)

尾语

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

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

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

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

Python面向对象写Student类 直接看代码写法: class Student: "这是Student类的说明" #__doc__ objCount = 0 #类的静态变量 def __init__(self, name, age): #构造函数,创建类的实例调用 print("构造方法!") self.name = name #self代表对象 ... 阅读详情

相关推荐

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1043

Python编程:类

Python入门级经典教程!

weixin_56051592的博客 4248

告别‘线束丛林’:手把手拆解车身域控制器(BCM/PEPS/网关)的硬件选型与PCB布局要点

本文深入解析车身域控制器的硬件选型与PCB布局要点,涵盖主控MCU选择、通信接口设计、电源架构优化及EMC设计等关键环节。通过实战案例分享,帮助工程师解决高密度集成带来的电源完整性、热管理和信号隔离挑战,实现更稳定高效的汽车电子系统设计。

weixin_42567279的博客 394

Python--类【详细教程】

Python--类【详细教程】

学无止境 2430

VH6501干扰仪的使用

触发模式方法备注External Trigger(外部触发)使用VH6501的I/O口作为触发源Frame Trigger(报文触发)设定被干扰报文的触发位置,并发送干扰位序列/报文software Trigger(软件触发)配置好干扰序列后直接发送Error Frame Trigger(错误帧触发)基于错误帧标识位为触发条件触发干扰Direction Trigger(发送方向触发)根据TX/RX发送/接收方作为触发条件Inverted Trigger(反向触发)

帮助100万人颠覆负面潜意识,实现人生蜕变,培养1万名潜意识开发导师 9047

刷题单向链表

实现一个数据结构,维护一张表(最初只有一个元素 11)。接下来 qq 行,每行表示一次操作,操作具体间题目描述。a[i] 里面放的是下一个元素,为0代表链表结束。如单链表1->4 -> 2->3->0用数组表示是。对于每个操作 2,输出一个数字,用换行隔开。第一行一个整数 qq 表示操作次数。

power的专栏 1714

python类的撰写

3.实例方法:至少包含一个对象参数self放在第一个,在内部‘self.方法()’调用,在外部通过‘对象名.方法()’调用。1.实例属性:在方法内部通过‘self.属性变量名’定义和访问的变量(在外部通过‘对象名.变量名访问’)定义一个矩形类,包含两个数据成员(属性参数):宽度和高度:该类提供两种方法 (功能函数):求面积和周长。2、重写:子类可以重新子类的方法(方法名称相同)2.类属性:在所有方法之外定义的属性(变量)一、类的定义(相当于多个函数集合的定义)三、类的属性(变量)四、类的方法(函数)

2201_75710420的博客 603

智能测试策略优化:平衡覆盖率、时间和资源

在软件开发过程中,测试是确保软件质量的关键环节。然而,测试工作往往面临着诸多挑战,其中如何在保证测试覆盖率的前提下,合理分配时间和资源是一个核心问题。本文章的目的在于探讨智能测试策略的优化方法,帮助软件测试团队在有限的时间和资源条件下,实现尽可能高的测试覆盖率。文章的范围涵盖了智能测试策略的核心概念、算法原理、数学模型、实际应用案例以及相关工具和资源等方面。本文将按照以下结构进行组织:首先介绍智能测试策略优化的背景和相关概念,包括核心术语和缩略词的定义;

AIGC应用创新大全的博客 619

装饰器python3菜鸟教程_Python小技巧:用类写装饰器的正确方法,一般新手都不知道...

装饰器是一个返回函数的函数。写一个装饰器,除了最常见的在函数中定义函数以外,Python还允许使用类来定义一个装饰器。pS注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新教程项目,还可以跟老司机交流讨教!1、用类写装饰器下面用...

weixin_39842475的博客 159

嵌入式视频应用开发者必读:嵌入式Linux+FFmpeg硬件编解码实战指南

在嵌入式Linux上,FFmpeg支持多种硬件加速API,比如VAAPI、VDPAU、CUDA,以及针对特定平台的专用接口(如NVIDIA的NVENC、Intel的QSV、ARM的Mali)。FFmpeg的硬件解码通过-hwaccel参数启用,咱们以常见的H.264和HEVC(H.265)格式为例,展示如何用VAAPI和V4L2实现高效解码。: FFmpeg硬件加速需要额外的库,比如libva(VAAPI)、libv4l2(V4L2)或libnvcodec(CUDA)。

大模型大数据攻城狮的专栏 2201

学Simulink--环境感知场景实例:基于Simulink的毫米波雷达多目标跟踪仿真

本文介绍了基于Simulink的毫米波雷达多目标跟踪仿真系统,重点分析了FMCW雷达信号处理流程(Range/Doppler FFT、CFAR检测)和多目标跟踪算法(JPDA数据关联、EKF状态估计)。通过构建城市道路交叉场景,验证了系统在跟踪精度(位置误差<0.2m)、实时性(单帧处理24ms)和鲁棒性(ID切换率<5%)方面的性能优势,并提出了UKF滤波、多传感器融合等优化方向。该仿真系统为自动驾驶环境感知提供了实用的毫米波雷达跟踪解决方案。

amy_mhd的博客 92

【Python学习教程】Python类和对象

转载于http://c.biancheng.net/python/ Python 语言在设计之初,就定位为一门面向对象的编程语言,“Python 中一切皆对象”就是对 Python 这门编程语言的完美诠释。 类和对象是 Python 的重要特征,相比其它面向对象语言,Python 很容易就可以创建出一个类和对象。同时,Python 也支持面向对象的三大特征:封装、继承和多态。 本章不仅会教你掌握 Python 类和对象的基本语法,还可以带你深入底层,了解 Python 面向对象的实现原理。 什么是面向对象,

qq_41854911的博客 1万+

美军利用MANET技术实现无人作战单元协同作战

本文首先介绍了移动自组织网络 (MANET)以及Wave Relay®波形中继技术,并探讨了波形中继MANET平台在美空军ABMS项目等军事方面的运用情况。

guanyifu9的博客 849

Python面向对象(二):类的继承和覆写

Python面向对象语法第二节:关于类的继承和多重继承,类的覆写。

a4546565的博客 1308

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python笔记——类定义

Python笔记——类定义 一、类定义: class : 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象 类的私有属性: __private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问 在类内部的方法中使用时 self.__private_attrs

wklken的笔记 12万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python进阶教程第二课——类

在Python中,类(class)是是面向对象编程(OOP)的核心概念之一。类是一个蓝图或模板,用于创建对象(实例)。类定义了对象的属性(数据)和方法(函数),允许你封装数据和行为,实现代码的复用和模块化。通过类,你可以创建多个具有相同属性和方法的对象。

liyibowen2006的博客 1112

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python如何写类_python中如何写类

Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类:classStudent(object):passclass后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。定义好了Student类,就可以根据Student类创建出St...

weixin_39528559的博客 797

python 类 教程_Python 类

Python 类和其它编程语言相比,Python 在尽可能不增加新的语法和语义的情况下加入了类机制。Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。类定义语法格式如下:class ClassName:...类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访...

weixin_39968995的博客 217

python写脚本入门-学习Python的教程?:python 脚本菜鸟教程

学习Python的教程?Python作为一门面向对象的性语言,其实它的学习也很简单- 配置- Python基础(语法、、数据类型、高级变量、函数、Python高级特性)- 面向对象编程、面向对象高级编程- 错误、调试、测试- 网络编程、进程、线程、协程、内建模块,常用第三方模块- web开发(Django、Flask、tornado等框架)- 运维开发、测试开发- 爬虫、数据分析、数据挖掘、数据清...

weixin_39525255的博客 4582

python类和对象基础教程

详细的讲解了python类和对象的基础知识

机器学习笔记 1250

python怎么写类_python中如何写类

类的定义Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类:class Student(object):passclass后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。定义好了Student类,就可以根据Student类创...

weixin_39942400的博客 155

python语法教程——class类

这里我们就以输出Hello world为例创建我们的第一个类。可以看到,我们创建了一个名为hello的类,并用它实例化了一个to_hello对象,通过调用类中的output方法,我们成功输出了Hello world!首先,我们定义一个student类,用于存放学生姓名。先运行一下看看。def output(self) : print('My name is' , self . name) stu_1 = student('老王') stu_1 . output()My name is 老王。

点点点 5289

Python 的类(菜鸟教程)

原文地址:http://www.runoob.com/python/python-object.html 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员:类变量或者实例变量, 用于...

lyb3b3b的专栏 8213
上一篇: Python中object类的特殊方法
下一篇: Python基础教程: json序列化详细用法介绍
魔王不会哭
博客等级 码龄5年 6002粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值