📄 一句话概括
类是图纸/模具(一份),对象是照图纸造出的实例(无数个)——类定义结构,对象装真实数据。
📝 本节和前面几节的关系
七个观点走完,收尾两站补基本功。第一站:把【类】与【对象】两个词焊牢,不再混用。
一、类=图纸
类只写【有什么属性、有什么方法】,不装任何具体数据——Dog 类只有一份,躺在代码里。 2.2 读电路图时就是这种感觉:图纸上画着电阻电容的接法,但图纸上没有一颗真的电阻。 类定义结构,结构是【模板】不是【实物】。
二、对象=实例
实例化(new)照图纸造出具体个体,各自装各的数据——旺财、小黑、阿黄三只狗对象,name 各不相同。 硬件版的类比:图纸一张,按图焊出的机器一台台——每台都通电装着【当前值】。 对象才占内存、才参与运行;类只是占代码空间的设计说明。
三、两个词的使用纪律
说【类的属性】是在讲图纸栏目(狗都有名字),说【对象的属性】是在讲某只狗的具体值(旺财叫旺财)。 技术文献里两词常被混着写——读到时用【图纸还是实物】这一问自辨。 7.9 的三大特性都定义在类上(图纸规定藏什么、传什么、怎么应答),却实现在每个对象上。
四、动手 Demo:图纸与产品
一张 Dog 图纸造三只狗,验证:图纸一份、对象多只、身份各异。
class Dog:
def __init__(self, name):
self.name = name
def speak(self): return "汪汪"
dogs = [Dog("旺财"), Dog("小黑"), Dog("阿黄")]
for d in dogs:
print(d.name, d.speak())
print("对象数", len(dogs))
print("身份各异", len(set(map(id, dogs))) == 3)
实跑输出:
--------------------------------------------------------------------
类和对象的区别——图纸与产品
--------------------------------------------------------------------
类是图纸(只有一份), 对象是照图纸造出的产品(可以有无数个):
旺财.speak() -> 汪汪
小黑.speak() -> 汪汪
阿黄.speak() -> 汪汪
图纸(Dog 类)有几张? 1 张
照图纸造出的对象有几只? 3 只
三只狗的身份号各不相同? True
概念 是什么 数量 例子
--------------------------------------------------------
类 图纸: 写属性和方法 1 份 Dog 类定义
对象 实例: 装具体数据 无数 旺财/小黑/阿黄
类只写【有什么】, 对象才装【具体值】——两个词从此不再混。
id() 各不相同说明三只狗是三个独立的内存对象——图纸一份,产品各占各的格子。 6.1 的【变量=格子】在这里续上了:对象的属性就是一组归它管的格子。
30 秒实验
- 说一说:Dog 类的 speak 方法有几份?旺财对象的 name 有几份?
- 在 Python 里连续实例化两个对象,用 id() 验证它们身份不同。
常见误区
- 以为类和对象是一回事的两种叫法——图纸与实物,数量与职责都不同。
- 以为类也占运行内存——运行时占内存的是对象,类只是设计说明。
自测三问(点开对答案)
1. 类和对象各是什么? —— 类是图纸/模具,对象是照图造出的实例。 2. 一张图纸能造几个对象? —— 无数个——每个对象装各自的数据。 3. 硬件里跟【图纸与实物】对应的类比? —— 电路图与按图焊出的机器——图一张,机器多台。- ☐ 下一节(7.11 类有三种使用方法)
相关笔记
- LX_CH2_22 — 电路图:图纸与成品的硬件版
- ☕ Java基础 · 索引 — class 与 new 的实例化每天都在用
- 💻 计算机是怎样跑起来的 · 索引