你好,我试图在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__
?
答案 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]
获取元素。但这也使您能够使用in
(if value in instance_of_class
)。
您可以阅读有关此类方法的信息。在python行话中,它们是dunder
方法。