尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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文件通常包含一个主要的类和几个辅助类。类是组织代码的容器。
RELATED

相关推荐

R3nzSkin国服特供版:英雄联盟内存级皮肤修改技术深度解析

R3nzSkin国服特供版:英雄联盟内存级皮肤修改技术深度解析

R3nzSkin国服特供版:英雄联盟内存级皮肤修改技术深度解析 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server R3nzSkin国服特供版是一款专为英雄…

📅 2026/9/14 9:54:38
终极文档下载神器:kill-doc三分钟搞定百度文库、原创力文档免费下载

终极文档下载神器:kill-doc三分钟搞定百度文库、原创力文档免费下载

终极文档下载神器:kill-doc三分钟搞定百度文库、原创力文档免费下载 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该…

📅 2026/8/25 3:51:35
BetterNCM插件管理器终极指南:3分钟快速安装网易云音乐插件

BetterNCM插件管理器终极指南:3分钟快速安装网易云音乐插件

BetterNCM插件管理器终极指南:3分钟快速安装网易云音乐插件 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗?BetterNCM-Insta…

📅 2026/9/15 12:38:21
MORE NEWS

更多资讯

📰

2026最新开区间和闭区间实战:告别Stack Trace报错

2026最新开区间和闭区间实战:告别Stack Trace报错 面对满屏的红色 Stack Trace,你是否也感到一阵眩晕?那些 IndexOutOfBoundsException 或…

📰

3个坑让火星票性能翻倍:图解原理与实战

3个坑让火星票性能翻倍:图解原理与实战 刚把同事发的“火星票”高并发抽奖代码跑起来,结果CPU直接飙到90%,接口响应从20ms变成了2s。那种盯着屏幕发呆、不知道从哪开始调度的感觉,真的让人抓狂。别慌,这种“复制即崩坏”的情况太常见了,根…

📰

非编源码拆解:从入门到精通,搞定原理面试不再卡壳

非编源码拆解:从入门到精通,搞定原理面试不再卡壳 面试时被问“非编系统底层怎么处理时间线同步”,脑子一片空白?别慌,这行混久了都知道,光会调API没用,得懂底层逻辑。今天咱们不整虚的,直接扒一扒非编(非线性编辑)的核心实现,带你从入门到精通…

📰

2026最新克里斯朵夫面试全解 3招搞定代码与原理

2026最新克里斯朵夫面试全解 3招搞定代码与原理 看了一堆教程还是不会写项目?别慌,这就是你卡在“克里斯朵夫”这个概念上的典型症状。很多开发者背下了定义,却写不出能跑的代码,一到实战就露馅。2026最新的技术面试风向已经变了,不再只考八股…

📰

电脑虚拟内存面试必问:3个高频坑让你代码崩盘

电脑虚拟内存面试必问:3个高频坑让你代码崩盘 刚拿到 offer 的应届生,最怕面试被问死。特别是当面试官轻飘飘甩出一句“讲讲电脑虚拟内存”,你心里咯噔一下:课本上背的那套“页表、缺页中断”,怎么跟实际开发里的 malloc 失败、…

📰

域名转入避坑保姆级教程 新手看这篇就够了

域名转入避坑保姆级教程 新手看这篇就够了 版本升级后 API 全变了,很多老手都头大,更别说刚入行的新人了。如果你正在为域名转入流程繁琐、文档晦涩而抓狂,这篇 保姆级教程…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬