为什么我们需要__init__来初始化python类

时间:2018-11-15 11:29:17

标签: python constructor init

我是OOP的新手,我需要一些帮助来了解python类中对构造函数的需求。

我了解 init 用于初始化类变量,如下所示:

class myClass():
    def __init__ (self):
        self.x = 3
        print("object created")

A = myClass()
print(A.x)
A.x = 6
print(A.x)

输出:

object created
3
6

但是,我也可以这样做,

class myClass():
    x = 3
    print("object created")

A = myClass()
print(A.x)
A.x = 6
print(A.x)

打印出相同的结果。

能否请您解释一下为什么我们需要一个构造函数,或者给我举一个例子说明上述方法不起作用的情况?

3 个答案:

答案 0 :(得分:4)

引用:但我也可以

class myClass():
    x = 3
    print("object created")

A = myClass()
print(A.x)
A.x = 6
print(A.x)

不,你不能。一旦要创建同一类的两个或多个对象,就存在根本的区别。也许这种行为会变得更加清晰

class MyClass:
    x = 3
    print("Created!")

a = MyClass() # Will output "Created!"
a = MyClass() # Will output nothing since the class already exists!

原则上,您需要__init__来编写需要初始化/创建该对象的每个新对象都需要执行的代码,而不仅仅是在读取类时执行一次。

答案 1 :(得分:3)

__init__用于初始化一个类的多个实例的状态,其中每个实例的状态彼此之间去耦,而您的第二个示例没有__init__初始化在类的所有实例之间共享的属性。

答案 2 :(得分:0)

init ()是默认方法,每次创建对象时都会调用它,因此 init 内部的变量称为实例属性。每次创建对象时都会自动调用 init (),使用 init ()方法将您在创建对象时传递给对象的数据分配给实例变量在这里,我们只是将方法和变量绑定在一起,每个对象将具有这些实例变量的单独副本,更改一个对象中的数据不会影响另一个对象中的数据