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 关键字作为类体即可。但在实际应用中,很少会创建空类,因为空类没有任何实际意义。

相关文章
|
28天前
|
存储 程序员 C语言
1. Python 内置数据类型:整数 int 详解
Python整数(int)无类型区分,取值范围无限,自动支持大数运算,不溢出。支持十、二、八、十六进制(如0b101、0o26、0x45),Python 3.x还允许用下划线分隔数字(如1_000_000)提升可读性。
|
28天前
|
索引 Python
1. Python 字符串切片详解:字符串截取原理与使用
Python字符串支持索引与切片操作:正向索引从0开始,负向索引从-1起;用`str[i]`获取单字符,`str[start:end:step]`截取子串,各参数均可省略,默认步长为1。
|
28天前
|
Python
1. Python 基础语法:pass 占位语句功能说明
本文介绍Python中`pass`空语句的用途:当代码逻辑需占位但暂不执行时,`pass`比`#TODO`注释更专业、更优雅。它明确表示“此处有意留空”,避免解释器报错,提升代码可读性与维护性。(239字)
|
24天前
|
数据采集 机器学习/深度学习 数据处理
基于python的地铁客流量预测系统
本研究基于FastAPI框架构建地铁客流量预测系统,融合AFC、天气等多源数据,优化机器学习模型与后端适配,提升实时性与准确性,助力运力调度与精细化运营。
|
28天前
|
程序员 Python
1. 一文看懂 Python 面向对象:什么是对象与一切皆对象
本节详解Python“一切皆对象”的内涵:以乌龟为例,阐释类、对象、属性、方法等OOP核心概念;说明OOP是比函数/数据封装更高级的抽象方式,能更真实模拟现实世界;并揭示Python中int、str、dict等内置类型本质都是对象。(239字)
|
28天前
|
人工智能 自然语言处理 IDE
开源 AI 编程智能体 OpenCode 实战:Claude Code 平替方案,环境搭建、模型对接、项目开发避坑指南
在AI编程Agent高速发展的2026年,很多开发者开始警惕闭源工具带来的厂商锁定、隐私泄露、访问受限等问题。OpenCode依靠MIT开源协议、模型中立架构、本地优先的数据策略,成为一款优秀的替代方案。它不仅仅是代码生成工具,而是一套完整可编程的开发智能体框架,支持终端、桌面、IDE多种形态,既可以对接云端大模型,也支持完全离线本地推理。
257 0
|
24天前
|
数据采集 存储 缓存
【建站实战】用 ESA + Cloudflare 把网站月费压到接近零费用
本文以geojsoncn.com为例,详解如何用阿里云ESA(中国边缘)+ Cloudflare Workers + R2构建百度友好型静态站:ESA保障国内可达与ICP备案,Workers无服务器计算,R2低成本存储。三者协同,月成本压至约10元,兼顾SEO硬指标与极致性价比。(239字)
|
23天前
|
人工智能 搜索推荐 SEO
流量入口迁移到 AI 之后:GEO 优化的五个实操要点
百度、谷歌的关键词搜索正在向 ChatGPT、DeepSeek、豆包等 AI 问答迁移。这篇文章拆解 GEO 的五个可落地实操要点。
|
23天前
|
存储 弹性计算 人工智能
阿里云轻量应用服务器抢购价38元1年,配置、抢购资格与时间、适用场景、抢购策略参考
本文详解阿里云38元/年轻量应用服务器抢购活动核心内容:2核2G配置搭配200M峰值带宽、40G系统盘,面向阿里云新用户每日10点、15点限量秒杀,可预装宝塔、WordPress等开箱即用应用镜像,适配个人博客、开发测试环境、轻量AI助理等场景。同时梳理抢购资格规则、实操策略,补充68元直购价、99元ECS特惠等替代方案,帮助用户理性选择适配自身需求的高性价比上云路径。