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文件通常包含一个主要的类和几个辅助类。类是组织代码的容器。

相关新闻

Grove压力传感器套件:从MPX5700AP原理到Arduino实战应用

Grove压力传感器套件:从MPX5700AP原理到Arduino实战应用

1. 项目概述:Grove压力传感器套件是什么?如果你玩过Arduino,大概率听说过Grove这个名字。它不是某个具体的传感器,而是一套由Seeed Studio推出的、旨在简化电子原型开发的模块化生态系统。简单来说,Grove把复杂的电路和…

2026/8/2 15:48:02 阅读更多 →
阿里通义Wan2.1视频生成模型:如何在ComfyUI中轻松实现图片变视频?

阿里通义Wan2.1视频生成模型:如何在ComfyUI中轻松实现图片变视频?

阿里通义Wan2.1视频生成模型:如何在ComfyUI中轻松实现图片变视频? 【免费下载链接】WanVideo_comfy 项目地址: https://ai.gitcode.com/hf_mirrors/Kijai/WanVideo_comfy 你是否曾经想过,只需一张静态图片和简单的文字描述&#xff0…

2026/8/2 15:48:02 阅读更多 →
麦克风阵列与ESP32协同:远场语音交互的硬件实现与视觉反馈设计

麦克风阵列与ESP32协同:远场语音交互的硬件实现与视觉反馈设计

1. 项目缘起:从“能听”到“听得好”的硬件探索 最近在折腾一个需要远场语音交互的桌面项目,核心需求是让设备在环境音复杂的场景下,也能清晰地“听”到我的指令。市面上的单麦克风方案,比如常见的USB会议麦克风,在安静…

2026/8/2 15:48:02 阅读更多 →

最新新闻

Unity游戏资源提取实战:AssetStudio核心原理与逆向工程应用

Unity游戏资源提取实战:AssetStudio核心原理与逆向工程应用

1. 项目概述:为什么我们需要提取Unity游戏资源?在游戏开发、逆向学习或者内容创作的过程中,你很可能遇到过这样的场景:看到一个Unity引擎制作的精美游戏,对其中的某个模型、一段音效或者一套UI界面爱不释手&#xff0c…

2026/8/2 20:15:51 阅读更多 →
如何快速上手Magpie:3分钟实现文本自动分类的完整指南

如何快速上手Magpie:3分钟实现文本自动分类的完整指南

如何快速上手Magpie:3分钟实现文本自动分类的完整指南 【免费下载链接】magpie Deep neural network framework for multi-label text classification 项目地址: https://gitcode.com/gh_mirrors/magp/magpie Magpie是一款专为多标签文本分类设计的深度神经网…

2026/8/2 20:15:51 阅读更多 →
Web Serial工具使用:浏览器直连ESP32-Bit-Pirate进行调试

Web Serial工具使用:浏览器直连ESP32-Bit-Pirate进行调试

Web Serial工具使用:浏览器直连ESP32-Bit-Pirate进行调试 【免费下载链接】ESP32-Bit-Pirate A Hardware Hacking Tool with Web-Based CLI That Speaks Every Protocol 项目地址: https://gitcode.com/GitHub_Trending/es/ESP32-Bit-Pirate ESP32-Bit-Pira…

2026/8/2 20:15:51 阅读更多 →
NodeJS JWT Authentication Sample核心功能解析:用户注册与登录实战教程

NodeJS JWT Authentication Sample核心功能解析:用户注册与登录实战教程

NodeJS JWT Authentication Sample核心功能解析:用户注册与登录实战教程 【免费下载链接】nodejs-jwt-authentication-sample A NodeJS API that supports username and password authentication with JWTs 项目地址: https://gitcode.com/gh_mirrors/no/nodejs-j…

2026/8/2 20:15:51 阅读更多 →
如何为Argon Design System React贡献代码?开发者指南与最佳实践

如何为Argon Design System React贡献代码?开发者指南与最佳实践

如何为Argon Design System React贡献代码?开发者指南与最佳实践 【免费下载链接】argon-design-system-react React version of Argon Design System 项目地址: https://gitcode.com/gh_mirrors/ar/argon-design-system-react Argon Design System React是基…

2026/8/2 20:15:50 阅读更多 →
利用OBS虚拟摄像头实现多屏共享与专业演示

利用OBS虚拟摄像头实现多屏共享与专业演示

1. 项目概述:多屏共享的“虚拟”解法在远程会议、在线教学或者游戏直播的场景里,你是不是也遇到过这样的尴尬:想同时分享PPT、演示软件和你的摄像头画面,但会议软件只允许你选择一个窗口或一个摄像头;或者,…

2026/8/2 20:14:50 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

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

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

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

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

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

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

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

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →