Python中有个类成员的概念,绝对是困扰新手的问题。看看下面的代码就知道两者的区别了。
1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4import time 5from datetime import datetime 6 7 8class Worker: 9 10 def working(self): 11 print self 12 for i in xrange(3): 13 print datetime.now().strftime('%H:%M:%S') 14 time.sleep(1) 15 16 17class Bundle: 18 _worker = None 19 name = '' 20 21 def __init__(self, name = ''): 22 self.name = name 23 24 @property 25 def worker(self): 26 if self._worker is None: 27 #两个不同worker对象 28 self._worker = Worker() 29 #同一个worker对象,但如果是不同进程的worker对象肯定不同 30 #self.__class__._worker = Worker() 31 return self._worker 32 33 def run(self): 34 print self.name 35 self.worker.working() 36 37 38if __name__ == '__main__': 39 b1, b2 = Bundle('b1'), Bundle('b2') 40 b1.run() 41 b2.run()
为什么要弄出个怪异的类成员,记得Python中一切都是对象吗,类和函数也是对象。Python创建对象时,是用的和IoLang一样的原型设计模式,将类对应复制一份,再在其基础上修改得到对象;和Java的基于类模板创建对象的方式有些不同,所以Python的__init__()叫做初始化方法,而不是构造函数,它控制的就是刚才所说修改这部分行为。