先看代码:
from typing import Dict
# 定义基类
class TaskBase:
_shared_state: Dict[str, str] = {}
def __init__(self) -> None:
self.__dict__ = self._shared_state
# 定义子类
class Task(TaskBase):
def __init__(self, state: str = None) -> None:
super().__init__()
if state:
self.state = state
else:
if not hasattr(self, "state"):
self.state = "Init"
模拟多个实例间任务状态的共享
测试一下:
t1 = Task()
t2 = Task()
t1.state = "Idle"
t2.state = "Running"
print(t1)
print(t2)
输出:
Running
Running
即时新加一个实例,也可以共享:
t3 = Task()
print(t3)
输出:
Running
修改其中某一个实例的属性,其他的会同步修改:
t2.state = "Idle"
print(t1)
print(t3)
输出:
Idle
Idle
原理很简单,就是利用Python中类的属性都存放在__dict__
中,我们把这个字典替换成一个我们自己定义的字典,这样所有子类的实例的属性都会存放到这里面,实现共享。