Python构造函数和__init__

为什么构造函数确实被称为“构造函数”? 他们的目的是什么?他们与课堂上的方法有什么不同?

另外,在一个类中可以有更多的__init__吗? 我尝试了下面的东西,有人可以解释一下结果吗?

 >>> class test: def __init__(self): print "init 1" def __init__(self): print "init 2" >>> s=test() init 2 

最后, __init__运算符是否为overloader?

Python中没有函数重载,这意味着你不能有多个具有相同名称但参数不同的函数。

在你的代码示例中,你不会重载 __init__() 。 会发生什么是第二个定义将名称__init__重新绑定到新方法,从而使第一个方法不可访问。

至于你关于构造函数的一般问题,维基百科是一个很好的起点: 链接 。 对于Python特定的东西,我强烈推荐Python教程 。

为什么构造函数确实被称为“构造函数”?

因为__init__构build你的对象。

他们与课堂上的方法有什么不同?

正如在官方文档中所述, __init__ 在创build实例时调用 ,其他方法不会接受这种处理。

他们的目的是什么?

目的是让您在创build时按照自己的意愿构build自己的对象。

例如Python允许你做:

 class Test(object): pass t = Test() tx = 10 # here you're building your object t print tx 

但是如果你想让Test 每个实例都有一个等于10的属性x ,你可以在__init__里面find这个代码:

 class Test(object): def __init__(self): self.x = 10 t = Test() print tx 

'self'只是用作方法函数的第一个参数的标准词,这是因为第一个参数是对象实例( class / static- methods除外) ,在我们的情况t

现在,如果你想要x属性的自定义值,你所要做的就是把这个值作为parameter passing给__init__

 class Test(object): def __init__(self, x): self.x = x t = Test(10) print tx z = Test(20) print tx 

我希望这会帮助你清除一些疑惑,既然你已经收到了其他问题的好答案,我会停在这里:)

类只是创build对象的蓝图。 构造函数是每次创build对象时都运行的代码。 因此,有两个构造函数是没有意义的。 会发生什么是第二个写第一个。

你通常使用的是为这个对象创buildvariables,如下所示:

 >>> class testing: ... def __init__(self, init_value): ... self.some_value = init_value 

所以你可以做的是从这个类创build一个对象,如下所示:

 >>> testobject = testing(5) 

然后testing对象将有一个名为some_value的对象,在这个示例中将是5。

 >>> testobject.some_value 5 

但是你不需要像我在样本中那样为每个对象设置一个值。 你也可以这样做:

 >>> class testing: ... def __init__(self): ... self.some_value = 5 

那么some_value的值就是5,创build对象时不需要设置它。

 >>> testobject = testing() >>> testobject.some_value 5 

>>>和…在我的示例不是你写的。 这是如何看起来在pyshell …

当你创build一个新的对象时,coonstructors被自动调用,从而“构造”这个对象。 你可以有多个init的原因是因为名字只是python的引用,你可以随时更改每个variables的引用(因此dynamictypes)

 def func(): #now func refers to an empty funcion pass ... func=5 #now func refers to the number 5 def func(): print "something" #now func refers to a different function 

在你的类定义中,它只是保留后者

在Python中没有方法重载的概念。 但是你可以通过指定可选参数和关键字参数来达到类似的效果