正在加载...

组合对象

blue 这个颜色是笔自己的,书包只是带着这支笔,所以 Bag 不是 Pen 的子类。你先用 Pen("blue") 做出笔,再用 Bag(pen) 把它放进书包。这个过程不会安装任何软件包,也不会建任何文件夹。

书包里的笔

python
class Pen:
    def __init__(self, color):
        self.color = color

class Bag:
    def __init__(self, pen):
        self.pen = pen

pen = Pen("blue")
bag = Bag(pen)
print(bag.pen.color)

要拿到颜色,你先从 bag 走到 pen,再读 color:bag.pen.color。书包自己没有 color,只是把笔里存的东西交出来。bag.pen 不是第二支笔,而是你做出来的那一支,所以 pen.color 和 bag.pen.color 都是 blue。print 只写出这一个词:前面没有 badge,也没有数字 4,更没有第二行。

写下 class Bag 这一行,书包里还是空的。笔要等到 Bag(pen) 执行时才放进去,就在这一刻,书包的 init 开始运行,self 就是这个书包。

📊 几个名字各指什么

你写的 它是什么
pen 你做出来的那支笔,blue 就存在它身上
bag.pen 同一支笔,只是放在书包里
bag.pen.color 单词 blue

程序里没有 bag.color。如果去读它,程序会停住并报 AttributeError,因为 bag 上没有存任何 color。None 不会被写出,程序也不会往下走。程序里同样没有 Bag("blue"):一个光秃秃的单词不是笔,也没有 color,读它的 .color 一样会停住并报 AttributeError。另外别写 class Bag(Pen),这种写法会造出子类,而这里的笔是放在书包里面的。

放进书包里的那支笔

你做出笔,把它放进书包,再通过 bag.pen.color 读到 blue。下一页讲数据类,也就是主要用来保存数值的类。这一页只是把笔放进书包,并通过书包读出 blue。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部