ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python类入门图解:Python Essential Training 中类结构、实例属性与类属性新手指南

Python类入门图解:Python Essential Training 中类结构、实例属性与类属性新手指南

【免费下载链接】python-ET-4314028

This repo is for linkedin learning course: Python Essential Training (UPDATE FY24 Q4)

项目地址:https://gitcode.com/gh_mirrors/py/python-ET-4314028
点击查看免费下载

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/ 目录下):

  1. 02_04_ControlFlow.ipynb、02_05_Functions.ipynb —— 先会函数,才好理解"方法";
  2. 02_06_Classes_and_Instances.ipynb —— 类的初体验;
  3. 07_01_AnatomyOfAClass.ipynb —— 实例属性与类属性对比(本文主角);
  4. 07_03_ClassInheritance.ipynb —— 继承,把类组织成"家族";
  5. 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)

项目地址:https://gitcode.com/gh_mirrors/py/python-ET-4314028
点击查看免费下载

相关推荐

上一篇:HTML转Figma完整指南:高效实现网页设计转换的终极方案
下一篇:如何3分钟快速上手City Picker省市区选择器:小白也能懂的完整教程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进