如何查找含特定属性值的类实例并执行属性更新操作?
Python中遍历类实例实现类似SQL的查询与更新操作
前提说明
Python不会自动跟踪类的所有实例,所以需要手动维护一个容器(比如类属性列表)来存储所有People实例,这是实现后续操作的基础。
1. 查找符合条件的实例并获取name属性(类比SQL SELECT)
首先定义People类,同时维护所有实例的列表:
class People: # 类属性:存储所有People实例 all_instances = [] def __init__(self, name, email_address): self.name = name self.email_address = email_address # 实例化时自动加入全局列表 People.all_instances.append(self)
实现查询逻辑
- 如果只需要第一个匹配的实例的
name:
target_name = None for person in People.all_instances: if person.email_address == 'spam_me@email.com': target_name = person.name break # 找到后终止遍历
- 如果需要获取所有匹配实例的
name(支持多个结果):
matching_names = [p.name for p in People.all_instances if p.email_address == 'spam_me@email.com']
对应的SQL类比语句:
SELECT name FROM People WHERE email_address='spam_me@email.com';
2. 更新符合条件的实例属性(类比SQL UPDATE)
遍历实例列表,直接修改匹配实例的email_address属性:
for person in People.all_instances: if person.email_address == 'spam_me@email.com': person.email_address = 'no@domain.tld'
对应的SQL类比语句:
UPDATE People SET email_address=REPLACE(email_address,'spam_me@email.com','no@domain.tld');
实际业务场景适配(工业机器主从管理)
将上述逻辑迁移到工业机器场景,只需替换类名和属性即可:
class Machine: all_machines = [] def __init__(self, machine_id, role, status='available'): self.machine_id = machine_id self.role = role # 'lead' 或 'slave' self.status = status Machine.all_machines.append(self) # 示例1:查找当前可用的主机器 current_lead = None for machine in Machine.all_machines: if machine.role == 'lead' and machine.status == 'available': current_lead = machine break # 示例2:轮换主机器(均衡损耗) if current_lead: current_lead.role = 'slave' # 选第一个可用的从机器升级为主机器 for machine in Machine.all_machines: if machine.role == 'slave' and machine.status == 'available': machine.role = 'lead' break
内容的提问来源于stack exchange,提问作者bradboy
相关产品推荐
相关产品推荐

