Python实现:控制对象的某些方法,以一定间隔执行

控制对象的某些方法,以一定间隔执行(不是每次都执行)

场景:有些设备并不需要每次执行reset。这样可以外部控制间隔多少次执行一次;另外有时候会同时用到好几台设备,所以要保证每台设备都是间隔执行reset。

如果有类似的场景可以做参考。

每次会创建1/2/4(obj_num )个对象,用完就销毁。但是每个对象的某个方法(reset)不是每次都执行,而是间隔几轮(step)被真正执行。这个间隔次数需要能够由外部控制。
假如step=4,意思每4次有1次对应那个对象的方法(这里是reset)就被激活调用,否则略过。
初步实现如下(如果有更好方法欢迎交流,一起优化):

class  A:
    reset_counter = 0  # 当前是第几次生成对象
    step = 4  # 间隔多少次开始除余处理
    remainders = [1]  # 余数范围
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"{self.name}"

    def reset(self):
        A.reset_counter += 1  # 这里必须用A.
        if A.reset_counter % A.step in A.remainders:  # 这里调用可以用self.或者A.
            print(f"\033[32;1m{self} 执行reset(每{A.step}次 reset 1次,这是第 {A.reset_counter} 次)\033[0m")
        else:
            print(f"\033[35;1m{self} 不执行reset(每{A.step}次 reset 1次,这是第 {A.reset_counter} 次)\033[0m")

def main():
    obj_num = 2  # 1 2 4  一次生成几个对象
    step = 4  # 求余的步长(还需要乘以obj_num)
    real_step = step * obj_num  # (乘以obj_num)
    remainders = list(range(1, obj_num + 1))  # reset的情况:余数限定于列表中的值(一般是obj_num的数量,这样每次生成的对象都会同步间隔step次后reset一次)

    A.reset_counter = 0  # 每次更新了obj_num和step后可以重新更新!
    A.step = real_step
    A.remainders = remainders

    for i in range(100):
        obj_list = []
        for j in range(obj_num):
            obj_i = A(str(i * obj_num + j))
            obj_list.append(obj_i)
        for obj_i in obj_list:
            obj_i.reset()
        del obj_list

if __name__ == '__main__':
    main()

结果:

1,obj_num = 1 # 1次用到1个设备
obj_num = 1  # 1次用到1个设备

2,obj_num = 2 # 1次用到2个设备
obj_num = 2  # 1次用到2个设备

3,obj_num = 4 # 1次用到4个设备
obj_num = 4  # 1次用到4个设备

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值