Python实现一个类的多个实例之间的属性共享

先看代码:

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__中,我们把这个字典替换成一个我们自己定义的字典,这样所有子类的实例的属性都会存放到这里面,实现共享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值