趋近智
if 语句for 循环with 自动关闭文件from ... importself 参数说明finally 块:清理操作让我们将本章所学内容付诸实践。我们将定义一个简单类,从它创建对象,并与这些对象的属性和方法进行互动。这个动手实践将帮助你更好地明白类如何作为蓝图,而对象则是从这些蓝图实际构建的事物。
假设我们想在程序中表示狗。每只狗可能都有名字和品种。狗也能执行动作,比如吠叫。让我们用一个类来表示这一点。
Dog 类使用 class 关键字,然后指定类的名称(按照惯例,类名以大写字母开头)。
class Dog:
pass # 'pass' 是一个占位符,表示“暂时不做任何事”
这是最简单的类定义。它目前没有太多功能,但这是一个有效的起点。
__init__ 初始化对象为了让我们的 Dog 对象有功能,它们需要名字和品种之类的数据。我们使用特殊的 __init__ 方法(常被称为构造函数)来设置对象创建时的初始状态。
请记住,类中任何方法的第一个参数通常命名为 self。它指代正在创建或操作的特定实例(对象)。
class Dog:
# __init__ 方法用于初始化新的 Dog 对象
def __init__(self, name, breed):
# 'self' 指代正在创建的实例
# 我们将传入的名字和品种存储为该实例的属性
self.name = name
self.breed = breed
print(f"Dog object named '{self.name}' created!")
# 现在,当我们创建 Dog 对象时,__init__ 会自动运行
在 __init__ 内部,我们接收 name 和 breed 作为参数(除了 self)。然后,我们使用 self.attribute_name = value 将这些值分配给对象的属性。因此,self.name = name 在正在创建的特定 Dog 对象上创建一个名为 name 的属性,并将提供的 name 值赋给它。类似地,self.breed = breed 存储品种。
对象不仅能保存数据;它们还能执行动作。我们将这些动作定义为类中的方法。方法是定义在类内部的函数。让我们添加一个 bark 方法。
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
print(f"Dog object named '{self.name}' created!")
# 定义 Dog 可以执行的动作的方法
def bark(self):
# 方法也把 'self' 作为第一个参数
# 这使得方法可以访问对象的属性
print(f"{self.name} says: Woof!")
注意 bark 方法也将 self 作为其第一个参数。这很重要,因为它允许方法访问对象自身的数据,比如它的 name 属性(self.name)。
Dog 对象(实例)现在我们有了 Dog 的蓝图(类),就可以创建实际的 Dog 对象(实例)。创建实例看起来就像调用类名,就像调用函数一样,并传入 __init__ 方法所需的参数(不包括 self,Python 会自动处理)。
# 创建第一个 Dog 实例
dog1 = Dog("Buddy", "Golden Retriever")
# 创建第二个 Dog 实例
dog2 = Dog("Lucy", "Poodle")
运行这段代码时,每次对象创建都会调用 __init__ 方法,你会看到“Dog object created!”的消息打印出来。我们现在有了两个独立的 Dog 对象,分别存储在变量 dog1 和 dog2 中。
有了对象后,你可以使用点号表示法(object.attribute_name)访问其属性,并使用点号表示法后跟括号(object.method_name())调用其方法。
# 访问 dog1 的属性
print(f"{dog1.name} is a {dog1.breed}.") # 输出:Buddy 是一只金毛寻回犬。
# 访问 dog2 的属性
print(f"{dog2.name} is a {dog2.breed}.") # 输出:Lucy 是一只贵宾犬。
# 调用 dog1 的 bark 方法
dog1.bark() # 输出:Buddy 说:汪!
# 调用 dog2 的 bark 方法
dog2.bark() # 输出:Lucy 说:汪!
注意 dog1.bark() 打印了 Buddy 的名字,而 dog2.bark() 打印了 Lucy 的名字。尽管它们共享类中相同的 bark 方法定义,但由于 self 参数,该方法作用于被调用的特定对象。
这是我们的简单 Dog 类及其用法的完整代码:
# 定义 Dog 类
class Dog:
# 构造函数,用于初始化属性
def __init__(self, name, breed):
self.name = name # 赋值名字属性
self.breed = breed # 赋值品种属性
print(f"Dog object named '{self.name}' of breed '{self.breed}' created.")
# 狗的行为方法
def bark(self):
print(f"{self.name} says: Woof!")
# 另一个示例方法
def describe(self):
print(f"This dog is named {self.name} and is a {self.breed}.")
# --- 使用类 ---
# 创建 Dog 类的实例(对象)
my_dog = Dog("Rex", "German Shepherd")
your_dog = Dog("Daisy", "Beagle")
print("\n--- 访问属性 ---")
# 使用点号表示法访问对象属性
print(f"我的狗的名字: {my_dog.name}")
print(f"你的狗的品种: {your_dog.breed}")
print("\n--- 调用方法 ---")
# 使用点号表示法调用对象方法
my_dog.bark()
your_dog.bark()
my_dog.describe()
your_dog.describe()
自己运行这段代码。尝试在 __init__ 方法中添加更多属性(比如 age),或者创建更多方法(比如 wag_tail())。这种动手操作对于理解 OOP 如何通过将数据(属性)和行为(方法)组合成称为对象的逻辑单元来帮助组织代码非常有用。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造