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中没有方法重载的概念。 但是你可以通过指定可选参数和关键字参数来达到类似的效果