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
哦,是的,我试试看!