[关闭]
@songying 2018-07-12T16:11:44.000000Z 字数 919 阅读 1342

类的构造方法 -- 特殊方法

python特殊方法


参考

1. 构造方法

该部分包含三个方法: __new__, __init__, __del__
注意一点:在初始化一个类实例时(x = SomeClass()) , __init__并非是最先调用的,第一个被调用的是__new__方法,这个方法才真正创建了实例。
在一个对象的生命周期结束的时候,__del__会被调用。

__new__(cls,[...)

__new__是对象实例化时第一个调用的方法,它只取下 cls 参数,并把其他参数传给__init____new__ 很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。我不打算深入讨论 __new__ ,因为它并不是很有用, Python文档 中 有详细的说明。

__init__(self,[...])

类的初始化方法。它获取任何传给构造器的参数(比如我们调用 x = SomeClass(10, ‘foo’) ,__init__就会接到参数 10 和 ‘foo’ 。 __init__在Python的类定义中用的最多。

__del__(self)

__new____init__ 是对象的构造器, __del__ 是对象的销毁器。它并非实现了语句 del x (因此该语句不等同于 x.__del__())。而是定义了当对象被垃圾回收时的行为。 当对象需要在销毁时做一些处理的时候这个方法很有用,比如 socket 对象、文件对象。但是需要注意的是,当Python解释器退出但对象仍然存活的时候, __del__ 并不会 执行。 所以养成一个手工清理的好习惯是很重要的,比如及时关闭连接。

demo

  1. from os.path import join
  2. class FileObject:
  3. '''文件对象的装饰类,用来保证文件被删除时能够正确关闭。'''
  4. def __init__(self, filepath='~', filename='sample.txt'):
  5. # 使用读写模式打开filepath中的filename文件
  6. self.file = open(join(filepath, filename), 'r+')
  7. def __del__(self):
  8. self.file.close()
  9. del self.file
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注