【问题标题】:Why do we need __init__ to initialize a python class为什么我们需要 __init__ 来初始化一个 python 类
【发布时间】:2019-04-18 11:57:10
【问题描述】:

我是 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)

打印出相同的结果。

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

【问题讨论】:

  • 您可以在 python 中阅读有关类成员与实例成员的信息。这应该会增进你的理解。
  • 您可以将参数传递给类对象并将这些值分配给构造函数中的类成员。

标签: python constructor init


【解决方案1】:

引用:但我也能做到

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__ 来编写需要在每个新对象被初始化/创建时执行的代码 - 而不仅仅是在读入类时执行一次。

【讨论】:

  • 谢谢,这有助于我的理解!
【解决方案2】:

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

【讨论】:

  • 好的,我的理解变得更清晰了..谢谢:)
【解决方案3】:

init()是每次创建对象时都会调用的默认方法,所以这里init中的变量被称为实例属性。 init() 会在每次创建对象时自动调用,在创建对象时传递给对象的数据会通过 init() 方法分配给实例变量这里我们只是简单地绑定了方法和变量,每个对象都有这些实例变量的单独副本,改变一个对象中的数据不会影响另一个对象中的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多