Python面向对象编程:类的用途及动态筛选实例方法问询
类的实际用途与动态实例操作解决方案
一、即使实例不多,类依然有意义
- 封装性:把物品的属性(
item_id、item_name)和对应的操作(比如show_list)打包在一起,逻辑更紧凑。要是用零散变量或字典,打印操作得写单独函数,而类里的方法天然属于这个实例,调用起来更直观。 - 可扩展性:现在实例少,以后要加功能(比如给物品加价格、计算折扣),直接在类里新增方法就行,不用到处改代码。比如加个
def get_discounted_price(self, rate):,所有实例都能直接用。 - 可读性与维护性:看到
Items类,别人一眼就知道这是处理物品相关逻辑的,属性和方法全在类里,比一堆杂乱的变量好理解、好维护。
二、根据用户输入动态筛选并操作实例
你之前的问题在于:输入的是字符串(比如"idA"),不是Items实例对象,所以直接调用show_list()会报错;第二个循环没做判断,所以会遍历所有实例。下面是两种可行的解决方案:
方法1:遍历列表查找(适合少量实例)
class Items: def __init__(self, item_id, item_name): self.item_id = item_id self.item_name = item_name def show_list(self): print(self.item_id, self.item_name) # 创建实例列表 item_list = [Items('idA', 'A'), Items('idB', 'B')] # 获取用户输入 selected_id = input("enter item id: ") # 遍历查找匹配实例 for item in item_list: if item.item_id == selected_id: item.show_list() break else: # 循环正常结束说明没找到匹配项 print(f"找不到ID为{selected_id}的物品")
方法2:用字典存储实例(查找效率更高)
如果实例数量较多,用字典以item_id为键存储实例,查找速度更快:
class Items: def __init__(self, item_id, item_name): self.item_id = item_id self.item_name = item_name def show_list(self): print(self.item_id, self.item_name) # 用字典存储实例 item_dict = { 'idA': Items('idA', 'A'), 'idB': Items('idB', 'B') } selected_id = input("enter item id: ") if selected_id in item_dict: item_dict[selected_id].show_list() else: print(f"找不到ID为{selected_id}的物品")
内容的提问来源于stack exchange,提问作者IIXXXIV
相关产品推荐
相关产品推荐

