像 LEGO 吗?爱 Python!🧱🐍
Source: Dev.to
Source: …
第 1 集:构建你的第一个砖块(定义类)
还记得你小时候拿到第一套 LEGO 时候的情景吗?那种纯粹的可能性,盯着一堆五颜六色的砖块,说明书上那看似简单的第 1 步在嘲笑你?
好,现在系好安全带,因为 Python 类基本上就是你自己编写的 LEGO 说明书。只不过你不是把小零件丢在地毯里,而是把它们丢进代码库。进步!
在 LEGO 的世界里,企业总部的某个人设计每种砖块的模具。一个 2×4 的红色砖块不仅仅是一块砖——它是成千上万块完全相同的 2×4 红色砖块中的一块,全部来源于同一套母版设计。Python 类的工作方式完全相同(只是不具备丹麦工程的精确度):
class LegoBrick:
"""Our master blueprint for LEGO bricks"""
pass
恭喜!你刚刚设计了……毫无用处的东西。这相当于 LEGO 中的光滑 1×1 瓦——技术上是砖块,实际上对建造任何有趣的东西毫无帮助。
真正的 LEGO 砖块有属性:颜色、尺寸、以及顶部那令人满意的小凸点。 在 Python 中,我们把这些称为 属性,并在一个特殊的方法 __init__() 中定义它们——读作 “dunder init”。
class LegoBrick:
def __init__(self, color, length, width):
self.color = color
self.length = length
self.width = width
self.studs = length * width # 自动计算凸点数量!
这里发生了什么?
self是 Python 用来表示 “我们现在正在构建的这块特定砖块” 的方式(稍后会详细说明)。- 我们为每块砖块赋予颜色、尺寸,并计算它的凸点数量。
- 当我们创建新砖块时(就像工厂里的注塑),
__init__()方法会自动运行。
现在有趣的部分来了——让我们制造一些真实的砖块:
my_red_brick = LegoBrick("red", 2, 4)
my_blue_brick = LegoBrick("blue", 2, 2)
my_weird_green_brick = LegoBrick("green", 1, 8) # 那块没人会用的奇怪砖
这些都是我们 LegoBrick 类的 实例——从蓝图中冲压出来的真实、具体的砖块。它们共享相同的结构(color、length、width、studs),但拥有不同的取值。
Source: …
self 揭示
当 Python 执行 my_red_brick = LegoBrick("red", 2, 4) 时,它:
- 创建一个全新的、空白的砖块对象。
- 自动将该砖块作为
self传递给__init__()。
你只需要提供其他参数(color、length、width)。因此 self 从砖块的视角来看,字面意思就是“你自己”。可以想象每块砖都有一个小小的内部独白:“我是红色的,我长 2 个单位,我宽 4 个单位……”。
乐高砖块并不是只会静静地站在那里(好吧,大多数情况下是,但请配合我的比喻)。它们可以做事——比如相互卡合。我们来给它们添加一些行为:
class LegoBrick:
def __init__(self, color, length, width):
self.color = color
self.length = length
self.width = width
self.studs = length * width
def describe(self):
return f"A {self.color} {self.length}x{self.width} brick with {self.studs} studs"
def can_connect_to(self, other_brick):
# Simplified logic: bricks can connect if dimensions match
return (self.length == other_brick.width or
self.width == other_brick.length)
试一试
red_brick = LegoBrick("red", 2, 4)
print(red_brick.describe())
# Output: "A red 2x4 brick with 8 studs"
blue_brick = LegoBrick("blue", 4, 2)
print(red_brick.can_connect_to(blue_brick))
# Output: True - they can snap together!
类是蓝图。实例是你根据这些蓝图实际构建的乐高砖块。方法是砖块能够执行的操作。属性是砖块对自身的认知。
🎯 关键要点
class关键字创建蓝图(就像乐高模具设计)。__init__()在创建新实例时运行(制造过程)。self指代正在创建或使用的特定实例。- 属性 是特征(例如
color、size),以self.attribute_name形式存储。 - 方法 是行为(属于类的函数)。
- 实例 是从类蓝图创建的实际对象。
有问题或在乐高比喻中发现错误?在下方留言!如果你喜欢本系列,点个 ❤️——这就像踩到乐高,但却是好事。