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

【Python语法基础学习笔记】类的定义和使用

一、类和对象的基本概念

什么是类?

类(Class)是一种自定义的数据类型,可以理解为现实世界中某类事物的抽象模板。比如:

  • 学生类(Student):代表所有学生的共同特征
  • 教师类(Teacher):代表所有教师的共同特征

类就像一个蓝图,定义了这类事物会有哪些属性(特征)和方法(行为)。

什么是对象?

对象(Object)是类的具体实例,也可以理解为用类创建的 "变量"。比如:

  • 用 Student 类创建出 "小明" 这个具体学生
  • 用 Teacher 类创建出 "李老师" 这个具体教师

一个类可以创建出无数个对象,每个对象都具有类中定义的属性和方法。

二、类的创建与使用

1. 类的基本创建

# 定义一个学生类
class Student:# 类的内容pass  # pass表示暂时不写内容

2. 构造函数

构造函数是创建对象时自动调用的特殊方法,用于初始化对象的属性。在 Python 中,构造函数的名字固定为__init__

class Student:# 构造函数,self是必须的参数def __init__(self, name, age):# 初始化对象的属性self.name = name  # 姓名属性self.age = age    # 年龄属性

3. 实例化(创建对象)

使用类创建对象的过程叫做实例化。

# 用Student类创建对象(实例化)
student1 = Student("小明", 18)  # 创建第一个学生对象
student2 = Student("小红", 17)  # 创建第二个学生对象

这里的student1student2就是 Student 类的对象。

4. 类的方法

方法是定义在类中的函数,用于描述对象的行为。

class Student:def __init__(self, name, age):self.name = nameself.age = age# 定义一个方法:介绍自己def introduce(self):print(f"大家好,我叫{self.name},今年{self.age}岁")# 定义一个方法:学习def study(self, subject):print(f"{self.name}正在学习{subject}")

5. 关于 self 的说明

  • self是类中方法的第一个参数,代表对象自身
  • 当对象调用方法时,Python 会自动把对象本身作为self参数传入
  • 通过self可以访问对象的属性和其他方法
  • self只是一个约定俗成的名字,也可以用其他名字,但建议始终使用self

三、属性和方法的分类

1. 实例属性

  • 属于具体对象的属性,每个对象的实例属性可以有不同的值
  • 定义在__init__方法中,用self.属性名表示
  • 通过对象名访问:对象名.属性名
class Student:def __init__(self, name, age):self.name = name  # 实例属性self.age = age    # 实例属性# 使用实例属性
student1 = Student("小明", 18)
print(student1.name)  # 输出:小明
student1.age = 19     # 修改实例属性

2. 类属性

  • 属于类本身的属性,所有对象共享同一个类属性
  • 定义在类中,方法外
  • 通过类名或对象名访问:类名.属性名 或 对象名.属性名
class Student:# 类属性:所有学生都属于同一个学校school = "阳光中学"def __init__(self, name, age):self.name = nameself.age = age# 使用类属性
print(Student.school)  # 输出:阳光中学student1 = Student("小明", 18)
student2 = Student("小红", 17)
print(student1.school)  # 输出:阳光中学
print(student2.school)  # 输出:阳光中学# 修改类属性(会影响所有对象)
Student.school = "希望中学"
print(student1.school)  # 输出:希望中学

3. 实例方法

  • 属于具体对象的方法,需要通过对象调用
  • 第一个参数必须是self,代表调用该方法的对象
  • 可以访问和修改实例属性和类属性
class Student:school = "阳光中学"def __init__(self, name, age):self.name = nameself.age = age# 实例方法def get_info(self):return f"姓名:{self.name},年龄:{self.age},学校:{self.school}"student1 = Student("小明", 18)
print(student1.get_info())  # 调用实例方法

4. 类方法

  • 属于类的方法,需要用@classmethod装饰器标识
  • 第一个参数是cls,代表类本身
  • 只可以访问和修改类属性,不能直接访问实例属性
  • 通过类名或对象名调用
class Student:school = "阳光中学"def __init__(self, name, age):self.name = nameself.age = age# 类方法@classmethoddef change_school(cls, new_school):cls.school = new_school  # 修改类属性# 调用类方法
Student.change_school("希望中学")
print(Student.school)  # 输出:希望中学

5. 魔术方法(特殊方法,竞赛不需要掌握)

魔术方法是 Python 中具有特殊功能的方法,以双下划线__开头和结尾。常用的魔术方法:

  • __init__:构造函数,创建对象时调用
  • __str__:返回对象的字符串表示,使用print()打印对象时调用
  • __len__:返回对象的长度,使用len()函数时调用
  • __del__:析构函数,对象被销毁时调用
class Student:def __init__(self, name, courses):self.name = nameself.courses = courses  # 课程列表# 自定义打印对象时的输出def __str__(self):return f"学生:{self.name}"# 自定义len()函数的返回值def __len__(self):return len(self.courses)  # 返回课程数量student1 = Student("小明", ["数学", "语文", "英语"])
print(student1)  # 输出:学生:小明(调用了__str__方法)
print(len(student1))  # 输出:3(调用了__len__方法)

四、综合示例

# 定义一个完整的学生类
class Student:# 类属性total_students = 0  # 学生总数def __init__(self, name, age):# 实例属性self.name = nameself.age = ageself.grades = {}  # 存储成绩的字典# 每创建一个学生,总数加1Student.total_students += 1# 实例方法:添加成绩def add_grade(self, subject, grade):self.grades[subject] = grade# 实例方法:计算平均成绩def get_average(self):if not self.grades:return 0return sum(self.grades.values()) / len(self.grades)# 类方法:获取学生总数@classmethoddef get_total(cls):return cls.total_students# 魔术方法:返回字符串表示def __str__(self):return f"{self.name}({self.age}岁)"# 使用学生类
if __name__ == "__main__":# 创建学生对象s1 = Student("小明", 18)s2 = Student("小红", 17)# 添加成绩s1.add_grade("数学", 90)s1.add_grade("语文", 85)s2.add_grade("数学", 95)s2.add_grade("语文", 92)s2.add_grade("英语", 88)# 打印信息print(s1)  # 调用__str__方法print(f"{s1.name}的平均成绩:{s1.get_average()}")print(s2)print(f"{s2.name}的平均成绩:{s2.get_average()}")# 查看学生总数print(f"学生总数:{Student.get_total()}")

总结

  • 类是对象的模板,对象是类的实例
  • 属性描述特征,方法描述行为
  • 实例属性和方法属于具体对象,类属性和方法属于类本身
  • self代表对象自身,cls代表类本身
  • 魔术方法可以自定义对象的各种行为

文章转载自:

http://3n4GC28X.fgxpy.cn
http://FMNRb8ap.fgxpy.cn
http://qcxHseDq.fgxpy.cn
http://iPTWyOT7.fgxpy.cn
http://k6bSeyyk.fgxpy.cn
http://C9ORJ7Dh.fgxpy.cn
http://f7QEuZY4.fgxpy.cn
http://EQ3pW0wl.fgxpy.cn
http://9KNJAiI0.fgxpy.cn
http://j3evV05a.fgxpy.cn
http://wjWsBUli.fgxpy.cn
http://sIKti3bK.fgxpy.cn
http://ZNAfvlDj.fgxpy.cn
http://fg8wbcMm.fgxpy.cn
http://UKmCUHpH.fgxpy.cn
http://BUroQMU2.fgxpy.cn
http://IB6kbbTJ.fgxpy.cn
http://Ud5K4mmo.fgxpy.cn
http://Ed55pdq8.fgxpy.cn
http://Z0gYs8Ue.fgxpy.cn
http://s73Y7rGx.fgxpy.cn
http://lg6VRMBr.fgxpy.cn
http://9Y8cBEWG.fgxpy.cn
http://H8ANS9sD.fgxpy.cn
http://l1BAQn4Z.fgxpy.cn
http://97TCEq9h.fgxpy.cn
http://VQdgyxVm.fgxpy.cn
http://2K0tQr1r.fgxpy.cn
http://LugqWNZn.fgxpy.cn
http://5sDvr7j7.fgxpy.cn
http://www.dtcms.com/a/365255.html

相关文章:

  • 面试复习题-Flutter场景题
  • C# 开发 ACS 运动控制系统:从入门到高阶应用实践
  • LSE录取率上升,中国申请者却减少!除了成绩,这点成关键胜负手
  • 跟做springboot尚品甄选项目
  • 逻辑回归:从原理到实战的完整指南
  • Spring AOP注解案例
  • AI 重塑就业市场:哪些职业会被替代?又有哪些新岗位正在崛起?
  • 基于https+域名的Frp内网穿透教程(Linux+Nginx反向代理)
  • python数据分析 与spark、hive数据分析对比
  • Gemini CLI源码解析:Agent与上下文管理实现细节
  • 2025年COR IOTJ SCI2区,灾后通信无人机基站位置优化和移动充电无人机路径规划,深度解析+性能实测
  • Aerobits-用于 sUAS 和 UTM/U-Space 的微型 ADS-B 技术(收发器/接收器)和无人机跟踪应答器
  • Grok-4 :AI 基准测试霸主,速度与智能并存——但代价几何?
  • 简述 Java 的异常体系结构。Error 和 Exception 有什么区别?
  • 精通人机协同:使用 LangGraph 构建交互式智能体的综合指南
  • 服务器固件全景地图:从BIOS到BMC,升级背后的安全与性能革命
  • [光学原理与应用-376]:ZEMAX - 优化 - 概述
  • 中通笔试ShowMeBug编程题复盘
  • Ansible 核心功能:循环、过滤器、判断与错误处理全解析
  • 《苍穹外卖》开发环境搭建_后端环境搭建【简单易懂注释版】
  • PL-YOLOv8:基于YOLOv8的无人机实时电力线检测与植被风险预警框架,实现精准巡检与预警
  • 【Spring Cloud微服务】11.微服务通信演义:从飞鸽传书到5G全息,一部消息中间件的进化史诗
  • Git 别名:用简短命令大幅提升开发效率
  • 无人机报警器8G信号技术解析
  • leetcode110. 平衡二叉树
  • 深入解析Java Spliterator(Stream延迟、并行计算核心)
  • 哪些AI生成PPT的软件或网站支持多平台使用?都支持哪些平台?
  • AI生成PPT工具排名:2025年高效办公新选择
  • 关于MySQL数据库连接超时问题及解决办法
  • AR智慧运维系统介绍