Python:工厂属性
Python:工厂属性,python,factory,Python,Factory,setup.inQ与complete.inQ不同吗 如果我把东西放在一个队列中,它就不会出现在另一个队列中,对吗 import Queue class Factory: name = "" inQ = Queue.Queue() outQ = Queue.Queue() def worker(self): pass @staticmethod def getFactory(factory_name): if factory_
setup.inQ
与complete.inQ
不同吗
如果我把东西放在一个队列中,它就不会出现在另一个队列中,对吗
import Queue
class Factory:
name = ""
inQ = Queue.Queue()
outQ = Queue.Queue()
def worker(self): pass
@staticmethod
def getFactory(factory_name):
if factory_name == "setup":
return SetupFactory()
elif factory_name == "dispatch":
return DispatchFactory()
elif factory_name == "complete":
return CompleteFactory()
else:
return None
class SetupFactory(Factory):
name = "setup"
def worker(self):
#extend
class DispatchFactory(Factory):
name = "dispatch"
def worker(self):
#extend
class CompleteFactory(Factory):
name = "complete"
def worker(self):
#extend
setup = Factory.getFactory("setup")
complete = Factory.getFactory("complete")
这很容易测试:
>>> import Queue
>>> class A(object):
... q = Queue.Queue()
...
>>> class B(A):
... pass
...
>>> a = A()
>>> b = B()
>>> b.q is a.q
True
我们看到,q
属性确实是跨子类共享的。(把东西放在b.q
中与把东西放在a.q
中完全一样)
这是有意义的,因为A.q
是类的一个属性,所以它是在创建A
时创建的。当创建B
时,Python不会创建新的,因为B
只是从a
继承属性和方法
一般来说,如果您想拥有一个不在类实例之间共享的属性,您可以将其放入类的初始化函数(\uuuu init\uuuu
)中,当您创建类实例时,python会神奇地调用该函数:
class Factory(object):
name = ""
def __init__(self):
self.inQ = Queue.Queue()
self.outQ = Queue.Queue()
啊,好的,谢谢你。因此,如果我没有一个项目显示在所有类中,我必须将Queue.Queue()移动到每个类中queues@ealeon--我想你可能想把代码移到
\uuuu init\uuuu
哦,是的,我试试看!