gpt4 book ai didi

Python:工厂属性

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:05 25 4
gpt4 key购买 nike

setup.inQcomplete.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 创建时创建。 Python 不会在创建 B 时创建一个新的,因为 B 只是从 A 继承属性和方法。

一般来说,如果你想拥有一个不在类的实例之间共享的属性,你可以将它放在类的初始化函数 (__init__) 中,它会被 python 神奇地调用当你创建一个类的实例时:

class Factory(object):
name = ""

def __init__(self):
self.inQ = Queue.Queue()
self.outQ = Queue.Queue()

关于Python:工厂属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com