4.1 初始化
通常对象创建后还没有准备好工作。首先需要给它们 传递所有必要的数据:工作参数、初始值、 对其他对象的引用等等。
这个过程叫做初始化,应该在对象创建后立即进行。
假设你有一个猫的类 (Cat)
,你想给它设置名字和年龄,
这可以通过几种方式来实现:
在对象创建后初始化属性
在这个例子中首先创建:
- 空对象
Cat
。 - 名为
barsik
的Cat
类的实例。 - 然后给 barsik 对象设置两个属性:
name
和age
直接添加到对象中。
class Cat:
pass
# 创建 Cat 对象
barsik = Cat()
# 在对象创建后初始化属性
barsik.name = "Barsik"
barsik.age = 5
print(f"猫的名字: {barsik.name}, 年龄: {barsik.age}") # 输出: 猫的名字: Barsik, 年龄: 5
使用方法来初始化属性
在这个例子中使用方法 initialize
来初始化属性。对象 Cat
创建时没有属性,然后
使用方法 initialize()
设置属性值。
class Cat:
def initialize(self, name, age):
self.name = name
self.age = age
# 创建 Cat 对象
barsik = Cat()
# 通过方法初始化属性
barsik.initialize("Barsik", 5)
print(f"猫的名字: {barsik.name}, 年龄: {barsik.age}") # 输出: 猫的名字: Barsik, 年龄: 5
使用类字段
在这个例子中,属性 name
和 age
在类级别定义。在创建对象 barsik
后,
属性直接初始化。
class Cat:
name = ""
age = 0
# 创建 Cat 对象
barsik = Cat()
# 初始化对象属性
barsik.name = "Barsik"
barsik.age = 5
print(f"猫的名字: {barsik.name}, 年龄: {barsik.age}") # 输出: 猫的名字: Barsik, 年龄: 5
哪种方法更好?都不是!最好用构造函数 :)
4.2 构造函数
构造函数 是一种特殊的方法,它会 自动
在类的新对象创建时调用。构造函数用于初始化对象的字段并可以执行任何
必要的初始操作来配置对象。
在 Python 中,构造函数是名叫 __init__
的方法。关于它的主要事实:
-
方法
__init__
是 Python 中的构造函数。 当新类实例创建时,它会 自动 被调用。 -
__init__
至少接受一个参数 —self
,它指向创建的对象。此外 可能会传递其他参数 来 初始化对象的属性。 -
在 方法
__init__
内可以使用self
来设置对象属性的初始值。 - 构造函数可以执行任何必要的操作来配置 对象,例如输入数据验证或与其他对象的连接设置。
参数自动传递给构造函数,只需在创建对象时将它们写在圆括号中。
下面是如何使用构造函数初始化我们的猫的样子:
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建名字和年龄的 Cat 对象
barsik = Cat("Barsik", 5)
print(f"猫的名字: {barsik.name}, 年龄: {barsik.age}") # 输出: 猫的名字: Barsik, 年龄: 5
创建 Cat
类型对象后,将自动调用方法
__init__
,并传递三个参数给它:
- 对象 barsik 的引用到参数
self
- 字符串 “Barsik” 到参数
name
- 数字 5 到参数
age
这很方便也很美观。
数据验证
另外,在构造函数中可以进行数据验证。毕竟构造函数的目标是形成一个有效(正确)的对象,以便进一步使用。例子:
class Cat:
def __init__(self, name, age):
if age < 0:
raise ValueError("年龄不能为负数")
self.name = name
self.age = age
# 创建带年龄验证的 Cat 对象
try:
barsik = Cat("Barsik", -3)
except ValueError as e:
print(e) # 输出: 年龄不能为负数
GO TO FULL VERSION