CodeGym /课程 /Python SELF ZH /对象的初始化

对象的初始化

Python SELF ZH
第 15 级 , 课程 4
可用

4.1 初始化

通常对象创建后还没有准备好工作。首先需要给它们 传递所有必要的数据:工作参数、初始值、 对其他对象的引用等等。

这个过程叫做初始化,应该在对象创建后立即进行。

假设你有一个猫的类 (Cat),你想给它设置名字和年龄, 这可以通过几种方式来实现:

在对象创建后初始化属性

在这个例子中首先创建:

  • 空对象 Cat
  • 名为 barsikCat 类的实例。
  • 然后给 barsik 对象设置两个属性:nameage 直接添加到对象中。


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

使用类字段

在这个例子中,属性 nameage 在类级别定义。在创建对象 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)  # 输出: 年龄不能为负数
               
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION