Python中的__init__是什么?

Python中的init是什么?

在学习Python时,我们经常会遇到__init__这个函数。那么,它是什么?有什么作用?在哪些情况下会用到呢?

阅读更多:Python 教程

__init__函数的作用

__init__这个函数是Python中特有的一个魔法方法(也叫特殊方法、双下划线方法)。当创建一个对象时,Python会主动调用该方法,用于对这个新的对象进行初始化操作。通俗地说,__init__函数就是用于初始化对象的函数。

我们可以在__init__函数中定义对象的属性,使得在对象创建后,这些属性就已经被定义好了。这些属性可以是数字、字符串、列表、元组等各种类型。

下面是一个简单的例子:

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

p1 = Person('Tom', 20)
print(p1.name)
print(p1.age)

在上述例子中,我们定义了一个Person类,其中__init__函数用于初始化对象。当我们创建一个Person对象时,我们需要传入两个参数,分别是nameage。这两个参数会被用来初始化对象的两个属性self.nameself.age

__init__函数的使用方法

__init__函数的参数通常为self以外的参数。在调用类时,除了第一个self参数外,其他参数将传递给__init__函数。

例如:

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

    def bark(self):
        print('汪汪!')

d = Dog('小黄', 2)
print(d.name)
print(d.age)
d.bark()

当我们创建一个Dog对象时,需要传入两个参数,即nameage。这两个参数会被__init__函数使用,并用来初始化对象的两个属性self.nameself.age。然后,我们可以通过对象访问这些属性,并调用bark函数。

__init__函数的位置

通常情况下,__init__函数需要放在类的最前面。因为在Python中,类中的代码是从上到下顺序执行的。如果在__init__函数调用前访问对象的属性,那么Python会报一个AttributeError的错误。

例如:

class Car:
    wheels = 4

    def drive(self):
        print('driving')

    def show_wheels(self):
        print('wheels:', self.wheels)

    def __init__(self):
        self.color = 'red'

c = Car()
c.show_wheels()
print(c.color)

在上述例子中,我们创建了一个Car类,并且在类的最后定义了__init__函数。在__init__函数中,我们初始化了一个新的属性self.color。最后,我们创建了一个Car对象c,并访问了show_wheels函数和color属性。

如果我们把__init__函数放在类的最后,我们将会得到一个AttributeError的错误:

class Car:
    wheels = 4

    def drive(self):
        print('driving')

    def show_wheels(self):
        print('wheels:', self.wheels)

c = Car()
c.show_wheels()
print(c.color)

在上述例子中,我们把__init__函数放在了类的最后。因此,当我们访问color属性时,会得到一个AttributeError的错误,因为此时color属性还没有被定义。

__init__函数和__new__函数的区别

在Python中,__new__函数和__init__函数都是用于创建对象的函数,但它们的作用不同。

__new__函数用于创建一个新的对象实例,并返回这个实例。__init__函数则用于初始化这个对象的属性。

举个例子:

class Test:
    def __new__(cls):
        print('__new__ function is called')
        instance = super(Test, cls).__new__(cls)
        return instance

    def __init__(self):
        print('__init__ function is called')
        self.name = 'test'

t = Test()
print(t.name)

在上述例子中,我们定义了一个Test类,并在其中添加了__new__函数和__init__函数。当我们创建一个Test对象时,Python会先调用__new__函数,用于创建这个对象。随后,Python会调用__init__函数,用于对这个新的对象进行初始化。最后,Python将新创建的对象返回。

如果我们不定义__new__函数,则Python会使用默认的__new__函数。此时,我们只需要在__init__函数中初始化对象的属性即可。

__init__函数的继承

当我们定义一个子类时,如果该子类没有定义自己的__init__函数,则Python会自动使用父类的__init__函数。如果子类定义了自己的__init__函数,则需要在其中调用父类的__init__函数,以完成父类的初始化工作。

举个例子:

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

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

d = Dog('小黄', 2)
print(d.name)
print(d.age)

在上述例子中,我们定义了一个Animal类和一个Dog类。在Animal类中,我们定义了一个__init__函数,用于初始化对象的name属性。在Dog类中,我们也定义了一个__init__函数,用于初始化对象的age属性。同时,我们通过调用super().__init__(name),将父类的__init__函数也加入到了子类的__init__函数中,以完成父类的初始化工作。

结论

__init__函数是Python中用于初始化对象的函数,其作用是在创建对象时对对象进行初始化。在定义__init__函数时,其参数通常为self以外的参数,在调用类时,除了self参数外,其他参数将传递给__init__函数。通常情况下,__init__函数需要放在类的最前面,以便对象的属性能够被正确定义。__init__函数和__new__函数都用于创建对象,但其作用不同。继承类中,子类可以继承父类的__init__函数,也可以定义自己的__init__函数,并在其中调用父类的__init__函数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程