📜  在 python 中创建构造函数(1)

📅  最后修改于: 2023-12-03 15:37:26.846000             🧑  作者: Mango

在 Python 中创建构造函数

构造函数在面向对象编程中是非常有用的。构造函数会在创建对象时自动调用,并初始化该对象的属性。Python 中的构造函数是 __init__ 函数。

创建一个简单的构造函数

下面是一个简单的 Person 类的构造函数示例。这个类有两个属性:nameage

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Alice", 25)
print(person.name)  # 输出 "Alice"
print(person.age)   # 输出 25

在上面的代码中,__init__ 函数包含了两个参数:selfnameageself 参数是一个必须的参数,它是对象本身的引用。nameage 参数是必须的,因为我们需要初始化对象的属性,然而它们可以根据实际需求进行更改。

__init__ 函数中,我们将 nameage 参数赋值给 self 对象的属性。这意味着创建新对象时,我们必须为 nameage 参数传递值,否则会引发 TypeError 异常。

默认构造函数

如果我们的类没有定义构造函数,Python 将提供默认的构造函数。但是,如果我们希望自定义构造函数,那么我们必须明确地提供 __init__ 函数。

下面是一个示例,其中我们不使用 __init__ 函数,而是依赖于默认构造函数:

class Person:
    pass

person = Person()
person.name = "Alice"
person.age = 25

print(person.name) #输出 "Alice"
print(person.age)  #输出 25

在上面的示例中,我们没有为 Person 类定义任何构造函数。因此,我们使用默认的构造函数来创建一个实例。我们可以像平常一样向实例对象添加属性。

继承中的构造函数

当我们从父类继承时,我们可能会需要覆盖父类的构造函数。但我们也可以在子类中定义自己的构造函数,并使用 super() 函数调用超类的构造函数。这可以通过以下方式实现:

class Animal:
    def __init__(self, species):
        self.species = species

class Dog(Animal):
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed
        super().__init__("Dog")

dog = Dog("Rex", "Labrador")
print(dog.species) #输出 "Dog"
print(dog.name)    #输出 "Rex"
print(dog.breed)   #输出 "Labrador"

在上面的代码中,我们创建 Animal 类并定义 __init__ 函数。然后我们创建 Dog 类,并在其中定义自己的构造函数。这个函数有两个参数:namebreed。我们还使用 super() 函数调用 Animal 类的构造函数,并传递 "Dog" 作为参数。这会将 species 属性设置为 "Dog"。

总结

在 Python 中,我们使用 __init__ 函数创建构造函数。这个函数包含一个 self 参数和一些其他必需的参数。我们可以使用构造函数初始化对象的属性。如果我们没有定义构造函数,Python 将提供默认的构造函数。在继承中,我们可以定义我们自己的构造函数,并使用 super() 函数调用父类的构造函数。