我想在不同类的实例之间传递一个变量(iterable)。我的结构与下面的结构相似
每个类都有自己的模块(因此没有全局变量),需要在Python3和Python2中工作
class O:
pass
class A(O):
pass
class B(O):
def __init__(self, cache):
self.cache = cache
class B1(B):
def p(self):
self.cache.add_to_cache("32", "something something")
class B2(B):
def p(self):
self.cache.get_from_cache("52", "something else")
对于B
及其子类,我想创建一个缓存。此类(B、B1、B2)的所有实例都使用相同的缓存
为了简单起见,假设缓存只是一个dict
c = {}
a = A(c)
b1 = B() - needs c
b1.p()
b2 = C() - needs c
b2.p()
print(cache)
当然,上面的例子是错误的,因为每个实例的缓存都不同
胃痛应该是:
{
"32", "something something"
"52": "something else"
}
另一种方法是使用CaseService作为可注入的单服务,我认为这是一个更好的实践。 Read this first for a code/syntax solution to your direct question,或继续阅读具有更好设计的解决方案
输出:
这仍然使用类变量,但在“日常代码”中隐藏它,并将其移动到“基础结构级别”。
我认为这更干净,因为现在您的类层次结构不应该处理自己的全局变量
要直接回答编程问题,请使用class variables
作为旁注,最好使用某种“CacheService”并将其注入构造函数,而不是使用继承和类变量。
关于这一点,见my other answer
使用类变量的代码如下:
输出:
请注意
_get_from_cache
和_put_in_cache
是方法,但它们可以是@staticmethod
,因为它们只访问类变量,并且它们的self
从未被“真正”使用过__cache
理论上可以由子级直接访问,但是_get_from_cache
和_put_in_cache
使__cache
私有,并为其提供受保护的API相关问题 更多 >
编程相关推荐