为什么构造函数确实被称为"构造函数"?他们的目的是什么?他们与班级中的方法有什么不同?
另外,__init__课堂上可以有更多的吗?我尝试了类似下面的内容,有人可以解释一下结果吗?
>>> class test:
def __init__(self):
print "init 1"
def __init__(self):
print "init 2"
>>> s=test()
init 2
Run Code Online (Sandbox Code Playgroud)
最后,是__init__一个运算符overloader?
Rik*_*ggi 63
为什么构造函数确实被称为"构造函数"?
因为__new__构建你的对象.
它们与班级中的方法有何不同?
正如在创建实例时调用官方文档 C.__new__中所述,其他方法不会接受此处理.
他们的目的是什么?
目的是让您在创建时按照自己的意愿构建对象.
例如,Python允许您执行以下操作:
class Test(object):
pass
t = Test()
t.x = 10 # here you're building your object t
print t.x
Run Code Online (Sandbox Code Playgroud)
但是如果你希望每个实例C.__init__都有一个__init__等于10 的属性,你可以在里面pyt代码C.__new__:
class Test(object):
def __init__(self):
self.x = 10
t = Test()
print t.x
Run Code Online (Sandbox Code Playgroud)
'self'只是用作方法函数的第一个参数的标准单词,因为在我们的例子中,第一个参数是对象实例(class/static -methods 除外)C.
现在,如果您想要C.__init__属性的自定义值,您只需要将该值作为参数传递给C:
class Test(object):
def __init__(self, x):
self.x = x
t = Test(10)
print t.x
z = Test(20)
print t.x
Run Code Online (Sandbox Code Playgroud)
我希望这会帮助你澄清一些疑问,既然你已经收到了其他问题的好答案,我会在这里停下来:)
类只是用于创建对象的蓝图.构造函数是每次创建对象时运行的一些代码.因此,拥有两个构造函数是没有意义的.会发生的是第二次写入第一次.
您通常使用它们的是为该对象创建变量,如下所示:
>>> class testing:
... def __init__(self, init_value):
... self.some_value = init_value
Run Code Online (Sandbox Code Playgroud)
那么你可以做的是从这个类创建一个对象,如下所示:
>>> testobject = testing(5)
Run Code Online (Sandbox Code Playgroud)
然后测试对象将有一个对象some_value,在此示例中将为5.
>>> testobject.some_value
5
Run Code Online (Sandbox Code Playgroud)
但是你不需要像我在我的样本中那样为每个对象设置一个值.你也可以这样做:
>>> class testing:
... def __init__(self):
... self.some_value = 5
Run Code Online (Sandbox Code Playgroud)
那么some_value的值将是5,你不必在创建对象时设置它.
>>> testobject = testing()
>>> testobject.some_value
5
Run Code Online (Sandbox Code Playgroud)
我的样本中的>>>和...不是你写的.它是pyshell的外观......