Python 中构造函数的用途是什么?

What is the purpose of constructor in Python?

  1. 构造函数是否在创建对象时为特定对象初始化属性?

我创建了一个简单的 class 用于添加。 我使用构造函数并初始化了两个参数a和b。

现在我在 class 中创建了一个添加方法。为此,我使用了相同的字母 a 和 b。

现在当我创建一个对象时,比如

Object = class(a-value, b-value)
Print(object.add())

我期待将初始化的 a 和 b 值发送到 add 方法。 但是错误仍然要求我传递 add()

的位置参数

当我 print(object.a) - 我得到 a 的初始化值!

构造函数是否用于传递特定对象的属性?

虽然 add 函数需要参数以及这些参数的实参?

完整代码(来自评论):

class Addition:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def addition(self, a, b):
        add=a+b
        return add

object1 = Addition(20, 30)
print(object1.addition())

这有帮助吗?

class Test():
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def add(self):
        return self.a + self.b


test = Test(15, 10)
print(test.a)
print(test.b)

print(test.add())

您在不需要的时候包含了本地参数。 只需删除它们并引用实例变量(属性)即可解决您的问题。

class Addition:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def addition(self):
        add = self.a + self.b
        return add

object1 = Addition(20, 30)
print(object1.addition())

Python 在您创建对象并将实例作为第一个参数隐式传递给绑定方法时非常有用。

出于这个原因,我们需要始终在我们的方法中包含一个可以将实例传递给的参数。

此参数的标准名称是 self(尽管它可以是任何名称)它有助于代码的读者像其他人一样引用它。

所以调用 object1.addition() 本质上是在正常的未绑定函数上执行此操作。

def normal_func_addition(some_object):
    add = some_object.a + some_object.b
    return add

object1 = Addition(20, 30)
print(normal_func_addition(object1))

您的另一个问题是“为什么需要构造函数?”

答案是这是在对象上设置属性的好地方。

同样,我们可以通过一个简单的顶级函数来实现。

def func_init(some_object, a, b):
    some_object.a = a
    some_object.b = b

class Addition:
    pass

object1 = Addition()
func_init(object1, 20, 30)
print(object1.a)
print(object1.b)

甚至直接。

object1.a = 20
object1.b = 30

但是样板文件太多了,一次完成所有工作真是太好了。

所以本质上,object1 = Addition(20, 30) 创建一个 Addition 对象 (object1) 并将该对象与 20 和 [=21 一起交给 __init__ =].

在那里,您可以为其分配属性 .a.b。然后,当您调用 object1.addition() 时,它再次将实例 (object1) 交给它。在那里您可以拉回您在 __init__.

中分配的属性