9.2 构造函数
我们要介绍的第一个魔法方法是构造函数。你可能从未听说过构造函数(constructor),它其实就是本书前面一些示例中使用的初始化方法,只是命名为__init__。然而,构造函数不同于普通方法的地方在于,将在对象创建后自动调用它们。因此,无需采用本书前面一直使用的做法:
>>> f = FooBar()
>>> f.init()
构造函数让你只需像下面这样做:
>>> f = FooBar()
在Python中,创建构造函数很容易,只需将方法init的名称从普通的init改为魔法版__init__即可。
class FooBar:
def __init__(self):
self.somevar = 42
>>> f = FooBar()
>>> f.somevar
42
到目前为止一切顺利。但你可能会问,如果给构造函数添加几个参数,结果将如何呢?请看下面的代码:
class FooBar:
def __init__(self, value=42):
self.somevar = value
你认为该如何使用这个构造函数呢?由于参数是可选的,你可以当什么事都没发生,还像原来那样做。但如果要指定这个参数(或者说如果这个参数不是可选的)呢?你肯定猜到了,不过这里还是演示一下。
>>> f = FooBar('This is a constructor argument')
>>> f.somevar
'This is a constructor argument'
在所有的Python魔法方法中, __init__绝对是你用得最多的
注意 Python提供了魔法方法__del__,也称作析构函数(destructor)。这个方法在对象被销毁(作为垃圾被收集)前被调用,但鉴于你无法知道准确的调用时间,建议尽可能不要使用__del__。
领取专属 10元无门槛券
私享最新 技术干货