Python面向对象:class定义类与创建实例对象
Python面向对象class定义类与创建实例对象一、开篇class——创建自定义类型的蓝图在Python中一切皆对象——整数是int类的实例字符串是str类的实例列表是list类的实例。class关键字让你创建自己的类型。这就像从使用内置工具进化到自己制造工具。⌨️ 最基本的class# 定义一个类classPerson:人类——最简单的类定义pass# 空类什么都没有# 创建实例对象p1Person()p2Person()print(type(p1))# class __main__.Personprint(isinstance(p1,Person))# Trueprint(p1isp2)# False —— 两个不同的实例二、class的基本语法2.1 类定义和命名规范# 类名使用PascalCase大驼峰——PEP 8规范# ✅ 好的命名classStudent:passclassBankAccount:passclassHttpRequestHandler:pass# ❌ 不好的命名# class student: # 应该大写开头# class bank_account: # 应该用驼峰# class HTTP_Request: # 缩写保持大写但下划线不必要# 类的文档字符串classPoint:二维空间中的一个点。 表示平面直角坐标系中的一个位置。 Attributes: x: 横坐标 y: 纵坐标 pass# 类的文档字符串可以通过__doc__访问print(Point.__doc__)2.2 添加属性和方法# 最简单的带属性和方法的类classDog:狗——带属性和方法# 类属性——所有实例共享species犬科动物# 初始化方法——创建实例时自动调用def__init__(self,name,age):self.namename# 实例属性self.ageage# 实例属性# 实例方法——操作实例数据defbark(self):returnf{self.name}说: 汪汪defcelebrate_birthday(self):过生日——年龄1self.age1returnf{self.name}现在{self.age}岁了# 创建实例dog1Dog(旺财,3)dog2Dog(小黑,1)# 访问属性和方法print(dog1.name)# 旺财print(dog1.bark())# 旺财说: 汪汪print(dog1.species)# 犬科动物 —— 类属性所有实例共享print(dog2.species)# 犬科动物 —— 同样的值# 各自独立的状态print(dog1.celebrate_birthday())# 旺财现在4岁了print(dog2.age)# 1 ——不变的2.3 类也是对象# Python中一切皆对象——类本身也是对象type的实例classMyClass:一个简单的类pass# 类是一个type对象print(type(MyClass))# class typeprint(type(MyClass()))# class __main__.MyClass# 类可以被赋值给变量AliasMyClass objAlias()# 等价于 MyClass()print(type(obj))# class __main__.MyClass# 类可以作为参数传递defdescribe_class(cls):returnf类名:{cls.__name__}, 文档:{cls.__doc__}print(describe_class(MyClass))# 类可以动态创建元编程# type(name, bases, dict) —— 动态创建类DynamicClasstype(DynamicClass,(),{x:10,hello:lambdaself:Hello!})objDynamicClass()print(obj.x)# 10print(obj.hello())# Hello!三、实例的创建过程3.1init__和__new# Python创建实例分两步# 1. __new__() —— 创建对象分配内存——很少需要重写# 2. __init__() —— 初始化对象设置属性——最常用classDemo:演示实例创建过程def__new__(cls,*args,**kwargs):创建实例——在__init__之前调用print(f1. __new__ 被调用, cls{cls.__name__})instancesuper().__new__(cls)# 调用object的__new__print(f 创建了实例:{instance})returninstancedef__init__(self,name):初始化实例——在__new__之后调用print(f2. __init__ 被调用, self{self})self.namenameprint(f 设置了 name{self.name})# 创建实例demoDemo(测试)# 输出# 1. __new__ 被调用, clsDemo# 创建了实例: __main__.Demo object at ...# 2. __init__ 被调用, self__main__.Demo object at ...# 设置了 name测试# 99%的情况下你只需要__init__# __new__主要用于不可变类型的子类str, int, tuple和单例模式3.2 动态属性# Python允许在运行时给实例添加属性# 但这不推荐——破坏了一致性classStudent:def__init__(self,name):self.namename sStudent(张三)s.age20# 动态添加属性——可以但不推荐s.emailzstest.com# __dict__属性——查看实例的所有自定义属性print(s.__dict__)# {name: 张三, age: 20, email: zstest.com}# __slots__可以限制实例的属性后面文章会讲四、实战案例4.1 学生管理系统classStudent:学生类school第一中学# 类属性——所有学生共享def__init__(self,student_id,name,grade):self.student_idstudent_id self.namename self.gradegrade self.scores{}# 科目→分数defadd_score(self,subject,score):添加或更新成绩ifnot0score100:raiseValueError(分数必须在0-100之间)self.scores[subject]scorereturnf{self.name}的{subject}成绩已更新为{score}分defget_average(self):计算平均分ifnotself.scores:return0returnsum(self.scores.values())/len(self.scores)defget_report(self):生成成绩报告lines[f学生:{self.name}(学号:{self.student_id})]lines.append(f学校:{self.school})lines.append(f年级:{self.grade})lines.append(-*30)forsubject,scoreinself.scores.items():grade优秀ifscore90else良好ifscore80else\中等ifscore70else及格ifscore60else不及格lines.append(f{subject}:{score}分 ({grade}))lines.append(f 平均分:{self.get_average():.1f})return\n.join(lines)# 使用s1Student(S001,张三,九年级)s1.add_score(语文,88)s1.add_score(数学,92)s1.add_score(英语,85)print(s1.get_report())五、总结class是创建自定义类型的蓝图。理解类和实例的关系——类是模板实例是具体的产品——是OOP的起点。核心要点类名用PascalCase命名**__init__**初始化实例属性实例属性各自独立类属性所有实例共享类本身也是对象——type的实例✅ 一个.py文件通常包含一个主要的类和几个辅助类。类是组织代码的容器。

相关新闻

Arduino Grove初学者套件EOL版:经典硬件入门与传感器编程实战

Arduino Grove初学者套件EOL版:经典硬件入门与传感器编程实战

1. 项目概述:一份迟到的“毕业设计”看到“Grove 初学者套件 for Arduino(EOL)”这个标题,很多老朋友可能会心一笑,而刚入坑的新手或许会感到一丝困惑。EOL,即“End of Life”,意味着这款经典的硬件套件已经停产&#…

2026/8/2 15:49:25阅读更多 →
如何快速提升下载效率:AB Download Manager完整使用教程

如何快速提升下载效率:AB Download Manager完整使用教程

如何快速提升下载效率:AB Download Manager完整使用教程 【免费下载链接】ab-download-manager A Download Manager that speeds up your downloads 项目地址: https://gitcode.com/GitHub_Trending/ab/ab-download-manager 还在为下载大文件速度慢而烦恼吗&…

2026/8/2 15:47:24阅读更多 →
2024年最值得信赖的5款免费AI助手(附真实响应延迟+上下文长度实测数据)

2024年最值得信赖的5款免费AI助手(附真实响应延迟+上下文长度实测数据)

更多请点击: https://codechina.net 第一章:2024年最值得信赖的5款免费AI助手(附真实响应延迟上下文长度实测数据) 在真实生产环境中,我们对主流免费AI助手进行了为期30天的连续压测——涵盖1000轮次对话、多轮上下文…

2026/8/2 15:47:24阅读更多 →
如何在Mac上实现NTFS完整读写:Free-NTFS-for-Mac终极解决方案

如何在Mac上实现NTFS完整读写:Free-NTFS-for-Mac终极解决方案

如何在Mac上实现NTFS完整读写:Free-NTFS-for-Mac终极解决方案 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and manage…

2026/8/2 17:12:08阅读更多 →
全球协作机器人一哥越疆科技“跨界”造恐龙,能否走出盈利困境?

全球协作机器人一哥越疆科技“跨界”造恐龙,能否走出盈利困境?

全球第一,却依然“生活不易”想要重现《侏罗纪公园》里的恐龙,可能比起生物工程,靠具身智能还靠谱一点。7月底,正值暑假中期,深圳自然博物馆展出了两只“活”的恐龙,让恐龙展厅成了当天全馆排队最长的地方。…

2026/8/2 17:12:08阅读更多 →
N皇后问题:从回溯算法到状态压缩的深度解析与优化实践

N皇后问题:从回溯算法到状态压缩的深度解析与优化实践

1. 问题引入:从棋盘到代码的经典回溯如果你对算法竞赛或者数据结构与算法这门课稍有接触,那么“N皇后问题”这个名字你一定不陌生。它就像一个算法领域的“Hello World”,但远比打印一行文字要复杂和深刻得多。我第一次在SCAU(华南…

2026/8/2 17:12:08阅读更多 →
i.MX6ULL蜂鸣器控制全解析:从设备树到应用编程

i.MX6ULL蜂鸣器控制全解析:从设备树到应用编程

在嵌入式开发中,控制一个简单的蜂鸣器(BEEP)往往是点亮第一个LED之后,新手接触硬件控制的第二个经典实验。它看似简单,却串联起了从硬件原理图、设备树(DTS)配置、内核驱动到用户空间应用程序的…

2026/8/2 17:12:08阅读更多 →
Airflow 任务依赖与调度最佳实践:DAG 设计精要

Airflow 任务依赖与调度最佳实践:DAG 设计精要

Airflow 任务依赖与调度最佳实践:DAG 设计精要 一、DAG 不是流程图:从依赖本质说起 很多团队刚接触 Airflow 时,把它当成一张普通的流程图来画。结果很快就踩坑。 DAG 的核心不是「画得好看」,而是「依赖关系正确且可重放」。这…

2026/8/2 17:12:08阅读更多 →
具身智能:从顶会趋势到落地挑战,从业者如何跨越理想与现实鸿沟

具身智能:从顶会趋势到落地挑战,从业者如何跨越理想与现实鸿沟

1. 从顶会热潮到落地冷思考:具身智能的十字路口 刚结束的ICRA和CVPR,无疑是全球机器人学和计算机视觉领域的两场年度盛宴。朋友圈里刷屏的论文接收喜报、会场里人头攒动的海报展,还有那些让人眼前一亮的Demo视频,无不散发着一种技…

2026/8/2 17:10:08阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →