如何将参数传递给类中的__init__

时间:2020-06-02 16:26:31

标签: python

你好,我试图在Python的类中理解__init__。我了解了类的工作原理,但我听不懂1件事 这是代码:

class Computer:

    def __init__(self, name, cpu, ram, hdd, ssd):
        self.name = name
        self.cpu = cpu
        self.ram = ram
        self.hdd = hdd
        self.ssd = ssd
    def config(self):
        print("Configuration of computer is: ", self.name, self.cpu, self.ram, self.hdd, self.ssd )


computer1 = Computer("HP ", "i7 ", "16gb ", "1TB ", "256GB")
computer1.config()

为什么以及如何将参数Computer("HP ", "i7 ", "16gb ", "1TB ", "256GB")自动传递给__init__(self, name, cpu, ram, hdd, ssd)?为什么我们在类括号中而不是像下面这样单独写参数:

 computer1.__init__("HP ", "i7 ", "16gb ", "1TB ", "256GB")

代码如何理解必须将计算机括号中的参数传递给__init__

2 个答案:

答案 0 :(得分:3)

因为__init__方法大致代表了Python中的构造函数。当您调用Computer("HP ","i7 ","16gb ","1TB ","256GB")时,Python会为您创建一个对象,并将其作为第一个参数传递给__init__方法。任何其他参数(超过您声明的5个参数)也将作为参数传递-在这种情况下,会引发异常,因为构造函数不需要这些参数。

答案 1 :(得分:1)

这是python的工作方式。 之所以这样设计是因为某些类/结构是用纯C语言编写的。

例如。 当您要实现自定义类并为其实现len()函数时,可以通过调用len(instance_of_your_class)来获得其长度。然后,您要做的就是在类中实现方法__len__()
另一方面,您在python中拥有类list。此类是用C实现的,因为它必须非常快。然后,当您调用len(instance_of_list)时,解释型将调用__len__,后者将调用C中的等价函数。

这种设计带来很多好处。一个示例是方法__getitem__。通过实施,您可以使用instalce_of_class[2]获取元素。但这也使您能够使用inif value in instance_of_class)。

您可以阅读有关此类方法的信息。在python行话中,它们是dunder方法。