Python构造函数和__

2024-04-19 15:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么构造器真的叫做“构造器”?它们的目的是什么?它们与类中的方法有何不同?

同样,一个类中是否可以有更多的__init__?我试了如下的方法,有人能解释一下结果吗?

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


>>> s=test()
init 2

最后,__init__是运算符重载吗?


Tags: 方法testself目的initdef运算符class
3条回答

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

在您的代码示例中,您不会重载__init__()。结果是,第二个定义将名称__init__重新绑定到新方法,导致第一个方法不可访问。

至于关于构造函数的一般问题,Wikipedia是一个很好的起点。对于特定于Python的内容,我强烈建议使用Python docs

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

构造函数(名为__new__)创建并返回类的新实例。因此,C.__new__类方法是类C的构造函数

在特定实例上调用C.__init__实例方法,在创建后初始化它,然后再传递回调用方。所以这个方法就是C的新实例的初始化器

它们与类中的方法有何不同?

official documentation__init__中所述,在创建实例后调用。其他方法不接受这种治疗。

他们的目的是什么?

构造函数C.__new__的目的是在构造新的C实例时定义自定义行为。

初始化程序C.__init__的目的是定义C的每个实例在创建后的自定义初始化。

例如,Python允许您执行以下操作:

class Test(object):
    pass

t = Test()

t.x = 10   # here you're building your object t
print t.x

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

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

t = Test()
print t.x

每个实例方法(在类的特定实例上调用的方法)都将实例作为其第一个参数接收。这个参数通常命名为self

类方法,例如构造函数__new__,而是接收类作为它们的第一个参数。

现在,如果您需要x属性的自定义值,您只需将该值作为参数传递给__init__

class Test(object):
    def __init__(self, x):
        self.x = x

t = Test(10)
print t.x
z = Test(20)
print t.x

我希望这能帮助你消除一些疑虑,既然你已经得到了其他问题的好答案,我就到此为止:)

类只是用来创建对象的蓝图。构造函数是每次创建对象时运行的一些代码。因此,有两个构造函数是没有意义的。结果是第二个写第一个。

通常使用它们的目的是为该对象创建变量,如下所示:

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

因此,您可以这样做,从这个类创建一个对象:

>>> testobject = testing(5)

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

>>> testobject.some_value
5

但您不需要像我在示例中那样为每个对象设置值。您也可以这样做:

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

然后某个值的值将是5,并且在创建对象时不必设置它。

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

以及。。。我的样本不是你写的。这就是它在pyshell中的样子。。。

相关问题 更多 >