【发布时间】:2014-03-16 19:32:07
【问题描述】:
如果一个子类想通过静态字段修改继承方法的行为,它是线程安全的吗?
更具体地说:
class A (object):
_m = 0
def do(self):
print self._m
class B (A):
_m=1
def test(self):
self.do()
class C (A):
_m=2
def test(self):
self.do()
在多线程环境中,调用 do() 的类 B 的实例是否会表现得像类 C 应该的那样,反之亦然?我会说是的,但我想知道是否有人已经实际测试过这种模式。
注意:这不是关于模式本身的问题,我认为应该避免这个问题,而是关于它的后果,正如我在审查现实生活中的代码时发现的那样。
【问题讨论】:
-
这可能是实际问题的一个糟糕示例 - 每个类都有一个 不同
_m变量。 -
这就是重点:这就是为什么它们可能被不同的并发线程混淆
标签: python multithreading thread-safety subclass