Python 面向对象:class 类的定义与入门使用

简介: 本节讲解Python类的定义:使用`class`关键字,类名首字母大写;类由类头和缩进统一的类体(属性/方法)构成;支持文档字符串、空类(`pass`);区分类属性与实例属性,`self`为实例方法首个参数。

前面章节中已经提到,类仅仅充当图纸的作用,本身并不能直接拿来用,而只有根据图纸造出的实际物品(对象)才能直接使用。因此,Python 程序中类的使用顺序是这样的:

  • 创建(定义)类,也就是制作图纸的过程;
  • 创建类的实例对象(根据图纸造出实际的物品),通过实例对象实现特定的功能。

本节先教大家如何创建(定义)一个类,如何使用定义好的类将放到后续章节进行讲解。

Python类的定义

Python 中定义一个类使用 class 关键字实现,其基本语法格式如下:

class 类名:
    多个(≥0)类属性...
    多个(≥0)类方法...

注意,无论是类属性还是类方法,对于类来说,它们都不是必需的,可以有也可以没有。另外,Python 类中属性和方法所在的位置是任意的,即它们之间并没有固定的前后次序。

和变量名一样,类名本质上就是一个标识符,因此我们在给类起名字时,必须让其符合 Python 的语法。有读者可能会问,用 a、b、c 作为类的类名可以吗?从 Python 语法上讲,是完全没有问题的,但作为一名合格的程序员,我们必须还要考虑程序的可读性。

因此,在给类起名字时,最好使用能代表该类功能的单词,例如用“Student”作为学生类的类名;甚至如果必要,可以使用多个单词组合而成,例如初学者定义的第一个类的类名可以是“TheFirstDemo”。

注意,如果由单词构成类名,建议每个单词的首字母大写,其它字母小写。

给类起好名字之后,其后要跟有冒号(:),表示告诉 Python 解释器,下面要开始设计类的内部功能了,也就是编写类属性和类方法。

其实,类属性指的就是包含在类中的变量;而类方法指的是包含类中的函数。换句话说,类属性和类方法其实分别是包含类中的变量和函数的别称。需要注意的一点是,同属一个类的所有类属性和类方法,要保持统一的缩进格式,通常统一缩进 4 个空格。

通过上面的分析,可以得出这样一个结论,即 Python 类是由类头(class 类名)和类体(统一缩进的变量和函数)构成。例如,下面程序定义一个 TheFirstDemo 类:

class TheFirstDemo:
    '''这是一个学习Python定义的第一个类'''
    # 下面定义了一个类属性
    add = 'http://c.biancheng.net'
    # 下面定义了一个say方法
    def say(self, content):
        print(content)

和函数一样,我们也可以为类定义说明文档,其要放到类头之后,类体之前的位置,如上面程序中第二行的字符串,就是 TheFirstDemo 这个类的说明文档。

另外分析上面的代码可以看到,我们创建了一个名为 TheFirstDemo 的类,其包含了一个名为 add 的类属性。注意,根据定义属性位置的不同,在各个类方法之外定义的变量称为类属性或类变量(如 add 属性),而在类方法中定义的属性称为实例属性(或实例变量),它们的区别和用法可阅读《Python类变量和实例变量》一节。

同时,TheFirstDemo 类中还包含一个 say() 类方法,细心的读者可能已经看到,该方法包含两个参数,分别是 self 和 content。可以肯定的是,content 参数就只是一个普通参数,没有特殊含义,但 self 比较特殊,并不是普通的参数。
更确切地说,say() 是一个实例方法,除此之外,Python 类中还可以定义类方法和静态方法。

事实上,我们完全可以创建一个没有任何类属性和类方法的类,换句话说,Python 允许创建空类,例如:

class Empty:
    pass

可以看到,如果一个类没有任何类属性和类方法,那么可以直接用 pass 关键字作为类体即可。但在实际应用中,很少会创建空类,因为空类没有任何实际意义。

相关文章
|
7天前
|
存储 运维 安全
【服务器数据恢复】WinServer服务器RAID5故障数据恢复及安全防护建议
本次故障设备为文件服务器,整机未配置UPS不间断电源。设备存储由6块SAS硬盘组建RAID5磁盘阵列,搭载Windows Server操作系统,主要用于内部部门文件存储与数据共享业务。 设备运行期间经历多次意外断电,重启后服务器出现RAID阵列报错,系统无法识别存储设备。运维人员进入RAID管理模块排查时,设备直接死机,多次重启后故障现象依旧,阵列异常问题无法自行解决。为挽回业务数据,用户将整机设备送至我方进行专业数据恢复处理。
|
7天前
|
弹性计算 关系型数据库 数据库
找阿里云代理商采购前要注意什么?账号、合同、续费和售后避坑指南
企业通过阿里云合作伙伴采购 ECS、RDS、OSS、CDN、WAF 等云资源时,真正需要防范的风险,往往不是“价格有没有便宜几百元”,而是账号是不是自己的、资源能不能自主控制、合同和发票是否清楚、续费规则有没有提前确认,以及出现问题以后到底谁负责处理。
找阿里云代理商采购前要注意什么?账号、合同、续费和售后避坑指南
|
1天前
|
索引 Python
1. Python 字符串切片详解:字符串截取原理与使用
Python字符串支持索引与切片操作:正向索引从0开始,负向索引从-1起;用`str[i]`获取单字符,`str[start:end:step]`截取子串,各参数均可省略,默认步长为1。
|
1天前
|
存储 程序员 C语言
1. Python 内置数据类型:整数 int 详解
Python整数(int)无类型区分,取值范围无限,自动支持大数运算,不溢出。支持十、二、八、十六进制(如0b101、0o26、0x45),Python 3.x还允许用下划线分隔数字(如1_000_000)提升可读性。
|
1天前
|
监控 Shell 测试技术
EMC整改服务商怎样用测试矩阵管理项目?端口、模式、改单和判据怎么建表
EMC整改服务商交付的数据如果无法对应样机、工作模式和改单版本,客户就不能复现结论。测试矩阵应在进实验室前建立,让每一条结果都能回答:测了什么、在哪个版本上测、改了什么、怎样判定。
|
1天前
|
人工智能 Java 测试技术
2026年百度职级体系:5—12级薪资多少?测试开发面试都考什么?
2026年5月1日起,百度启用全新5—12级数字职级体系,取消T/P/E/Band/M等字母标签,打通专业与管理双通道,聚焦“专业力+领导力”复合型人才。技术岗薪资呈阶梯式增长,高职级收入差异主要源于股权激励。测试开发岗位已深度融入AI测试,涵盖大模型评测、RAG、Agent验证等前沿方向,面试同步强化AI工程能力考察。
|
1天前
|
人工智能 安全 网络安全
科研团队终端管控,难点不在技术而在人进出
南京某材料研究所课题组曾因成员离职携数据外泄致论文被抢发、项目延期。针对科研团队人少、流动快、合作频繁的特点,“安企神”提供三重防护:数据隔离圈定(沙箱+透明加密+分区密钥)、外发严控(AI审计/U盘分级管控)、全程留痕(操作日志+屏幕录像),并支持一键锁定离职人员与网络准入管控,真正实现“圈得住、留得下、收得回”。
|
3天前
|
缓存 NoSQL Java
2026年小红书职级体系:薪资多少?测试开发面试都考什么?
本文揭秘小红书2024年已取消R职级(R4/R5/R6),当前薪资数据仅为历史参考。文章厘清R级失效后的岗位定级逻辑,拆解真实Offer中现金、奖金、股权构成,并聚焦测试开发面试核心:项目深挖、全链路业务测试(如点赞)、Java/Python、MySQL/Redis/MQ、网络系统、性能工程及AI测试新趋势,助你精准备战。
|
7天前
|
数据采集 机器学习/深度学习 监控
告别爬虫采集1688商品数据:1688拍立淘图片API接入实践方案
1688.item_search_img是B端专属图片搜索API,支持POST(Base64)/GET(URL)方式,基于深度学习匹配同款/相似批发商品,返回起订量、阶梯价、工厂标识等产业带字段,适用于选品、竞品监控与供应链采购。(239字)
|
2月前
|
JSON 供应链 小程序
扫描条码查商品信息
条码查询API支持扫码自动获取商品名称、品牌、规格、厂家、价格及图片等结构化信息,覆盖食品、日化、药品等千万级条码,适用于电商上架、库存管理、药店核验等场景,接入简单、响应高效。
718 0