【免费下载链接】python-ET-4314028
This repo is for linkedin learning course: Python Essential Training (UPDATE FY24 Q4)
Python 类(class)是面向对象编程的核心。本文基于 LinkedIn Learning 官方课程Python Essential Training的配套练习仓库,用最通俗的方式拆解Python 类结构、实例属性与类属性三大新手必学概念,帮你快速建立正确的对象思维。
🐶 从一只 Dog 类开始:类与实例的关系
课程用一只名叫 Rover 的小狗来讲解类。你可以这样理解:
- 类(Class):一张"图纸",定义了所有狗共有的结构和行为;
- 实例(Instance):按图纸造出来的具体一条狗,比如
myDog = Dog('Rover')。
在 02_06_Classes_and_Instances.ipynb 中,Dog类只有一个"构造方法"__init__和一个说话方法speak:
class Dog: def __init__(self, name): self.name = name self.legs = 4 def speak(self): print(self.name + ' says: Bark!')__init__(self, name):创建实例时自动执行的初始化方法,name是外部传入的参数;self.name = name:把参数存到这条狗自己身上,这叫实例属性;speak(self):实例方法,self始终指向"调用它的这个实例"。
my_dog = Dog('Rover') my_dog.speak() # 输出: Rover says: Bark!💡 记忆口诀:类是模具,实例是产品;
self是谁调用,就指谁。
🧩 类结构图解:init、方法与 self
一个类通常由三部分组成,对应 07_01_AnatomyOfAClass.ipynb("Anatomy"即解剖)的章节安排:
| 组成 | 示例 | 作用 |
|---|---|---|
| 构造方法 | __init__ | 实例出生时的"出厂设置" |
| 实例方法 | speak(self) | 实例能干的事 |
| 属性 | self.name | 实例携带的数据 |
注意speak的参数是self而不是name——调用my_dog.speak()时,Python 会自动把my_dog塞进self,所以实例方法不需要手动传实例本身。
🎯 实例属性 vs 类属性:新手最容易混淆的坑
这是本课的重点,也是07_01_AnatomyOfAClass.ipynb用整整两节对比演示的内容。
实例属性:写在__init__里,每个实例一份
def __init__(self, name): self.name = name self.legs = 4 # 实例属性legs挂在myDog身上。此时直接通过类名访问会报错:
Dog.legs # AttributeError: type object 'Dog' has no attribute 'legs'这个AttributeError正是课程故意演示的"反面教材":实例属性属于具体对象,不属于类本身。
类属性(静态属性):写在类体里,全体共享
class Dog: legs = 4 # 类属性 def __init__(self, name): self.name = name这时两种方式都能读到:
print(myDog.legs) # 4 print(Dog.legs) # 4更关键的"共享"特性:修改类上的属性,所有实例跟着变:
Dog.legs = 3 myDog.legs # 变成 3一张表看懂两者区别
| 对比项 | 实例属性 | 类属性 |
|---|---|---|
| 定义位置 | __init__中self.x = ... | 类体内直接x = ... |
| 数据归属 | 每个实例各存一份 | 全体实例共享一份 |
能否Dog.x访问 | ❌ 报AttributeError | ✅ 可以 |
| 修改影响 | 只影响本实例 | 影响所有实例 |
🛡️ 进阶小贴士:用下划线"约定"私有属性
Notebook 最后演示了第三种写法:把legs命名为_legs,并提供getLegs()方法对外取值:
class Dog: _legs = 4 def getLegs(self): return self._legs课程演示了一个微妙的行为:
myDog._legs = 3 print(myDog.getLegs()) # 3 —— 改的是实例自己 print(Dog._legs) # 4 —— 类属性没变单个下划线前缀只是 Python 社区的命名约定(表示"内部使用,请谨慎修改"),并不真正阻止访问。理解"实例上赋值会新建一份实例属性、遮蔽类属性",是跳出这个坑的关键。
📚 推荐学习路径:按 Notebook 顺序学
仓库按课程章节组织,学类之前建议按下面的顺序热身(都在 exercise_files/ 目录下):
- 02_04_ControlFlow.ipynb、02_05_Functions.ipynb —— 先会函数,才好理解"方法";
- 02_06_Classes_and_Instances.ipynb —— 类的初体验;
- 07_01_AnatomyOfAClass.ipynb —— 实例属性与类属性对比(本文主角);
- 07_03_ClassInheritance.ipynb —— 继承,把类组织成"家族";
- 07_04_Challenge_Hints.ipynb —— 课后挑战与提示,巩固所学。
想回顾知识点时,可翻阅 reference_guide.ipynb 作为速查手册。
✅ 新手自检清单
学完本文,你应该能回答:
__init__什么时候被调用?self指向谁?- 实例属性和类属性分别写在哪里?
- 为什么
Dog.legs(legs为实例属性时)会抛出AttributeError? - 执行
Dog.legs = 3后,所有实例的legs会变成什么?
把 Dog 的例子在 Jupyter Notebook 里亲手敲一遍,改改名字、改改腿数,观察输出变化——Python 类的核心概念,你就入门了。
【免费下载链接】python-ET-4314028
This repo is for linkedin learning course: Python Essential Training (UPDATE FY24 Q4)
相关推荐
Certimate 本地开发与代码贡献指南:从环境搭建、双端调试到提交 PR 的完整实战
Certimate 本地开发与代码贡献指南:从环境搭建、双端调试到提交 PR 的完整实战 本篇技术指南围绕 Certimate 开源仓库的 CONTRIBUTI
Polipo部署实战:从源码编译到生产环境的最佳实践
Polipo部署实战:从源码编译到生产环境的最佳实践 Polipo是一款高效的缓存HTTP代理服务器,能够显著提升网络访问速度并优化带宽使用。本文将详细介绍如何
理解计算机如何思考:Python Essential Training 变量、基本数据类型与数据结构图解入门
理解计算机如何思考:Python Essential Training 变量、基本数据类型与数据结构图解入门 想快速理解 变量、基本数据类型与数据结构 这三个
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考