You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过通配符同时为Memory类中多个Register对象设置属性?

实现通配符批量设置寄存器属性的解决方案

你遇到的核心问题是:返回filter/生成器这类迭代器时,直接给它的value赋值只会修改迭代器本身的属性,而非每个目标寄存器的属性。要实现aMemory["registerName*"].value = 12这种简洁语法,我们可以用代理类来包装匹配到的寄存器集合,拦截属性赋值操作并批量应用。

具体实现代码:

首先定义代理类,负责批量处理属性操作:

class RegisterProxy:
    def __init__(self, registers):
        # 转成列表存储,避免迭代器只能遍历一次的限制
        self._registers = list(registers)
    
    def __setattr__(self, name, value):
        # 跳过自身内部属性的设置,防止递归调用
        if name == "_registers":
            super().__setattr__(name, value)
            return
        # 遍历所有匹配的寄存器,批量设置属性
        for reg in self._registers:
            setattr(reg, name, value)

然后修改Memory类的__getitem__方法,返回代理对象而非迭代器:

import fnmatch

class Register:
    def __init__(self, name):
        self.name = name
        self.value = 0

class Memory:
    def __init__(self):
        self._registers = {}
        # 初始化示例寄存器
        self._registers["registerName1"] = Register("registerName1")
        self._registers["registerName2"] = Register("registerName2")
        self._registers["registerName3"] = Register("registerName3")
    
    def __getitem__(self, registerId):
        if '*' in registerId or '?' in registerId:
            matched_regs = filter(
                lambda r: fnmatch.fnmatch(r.name, registerId),
                self._registers.values()
            )
            return RegisterProxy(matched_regs)
        return self._registers[registerId]

测试使用:

aMemory = Memory()
# 批量设置匹配通配符的寄存器value
aMemory["registerName*"].value = 12

# 验证结果
print(aMemory["registerName1"].value)  # 输出 12
print(aMemory["registerName2"].value)  # 输出 12
print(aMemory["registerName3"].value)  # 输出 12

扩展功能(可选):

如果需要支持批量读取属性(比如获取所有匹配寄存器的value列表),可以给RegisterProxy添加__getattr__方法:

def __getattr__(self, name):
    return [getattr(reg, name) for reg in self._registers]

这样就能用all_values = aMemory["registerName*"].value获取所有匹配寄存器的value列表。

如果你觉得代理类实现稍显复杂,也可以选择写一个专门的批量设置方法(比如set_matching(pattern, **attrs)),但代理方案能完全满足你最初想要的简洁语法需求。

内容的提问来源于stack exchange,提问作者Betoneira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:23:27