Python无SQL实现内存存储用户信息及搜索功能开发求助
解决方案
首先,你的代码存在几个可优化点,同时需要补充数据存储与核心功能的实现逻辑:
1. 修正Human类基础问题
- 你的
Human类继承了ABC但未定义任何抽象方法,完全没必要保留相关导入与继承。 add_human静态方法需要在实例化时自动触发,否则_HumansTotal的统计毫无意义。list方法的参数冗余,它只需要返回当前实例的信息即可,建议重命名为get_info或直接实现__str__方法来简化打印。
2. 添加实例存储逻辑
需要一个容器来保存所有创建的Human实例,我们可以用类变量_instances实现,在__init__方法中将当前实例自动加入这个列表。
3. 实现核心功能
- 列出所有数据:添加类方法返回所有实例的格式化信息。
- 按姓名搜索:添加类方法接收姓名参数,过滤出匹配的实例。
完整代码示例
class Human: # 类变量:存储所有Human实例、统计总人数 _instances = [] _HumansTotal = 0 def __init__(self, name, surname, age, phone): self._name = name self._surname = surname self._age = age self._phone = phone # 实例化时自动完成存储与计数更新 Human._instances.append(self) Human._HumansTotal += 1 def get_info(self): # 返回当前实例的格式化信息 return f"姓名: {self._name}, 姓氏: {self._surname}, 年龄: {self._age}, 手机号: {self._phone}" @classmethod def list_all_humans(cls): # 列出所有存储的用户数据 if not cls._instances: return "暂无用户数据" return "\n".join([human.get_info() for human in cls._instances]) @classmethod def search_by_name(cls, target_name): # 按姓名搜索匹配的用户 matches = [human.get_info() for human in cls._instances if human._name == target_name] if not matches: return f"未找到姓名为{target_name}的用户" return "\n".join(matches) # 功能测试 if __name__ == "__main__": # 添加测试用户 Human("张三", "张", 25, "13800138000") Human("李四", "李", 30, "13900139000") Human("张三", "王", 28, "13700137000") # 打印所有用户数据 print("所有用户数据:") print(Human.list_all_humans()) # 按姓名搜索 print("\n搜索姓名为张三的用户:") print(Human.search_by_name("张三")) print("\n搜索姓名为赵五的用户:") print(Human.search_by_name("赵五"))
代码说明
_instances类变量负责在内存中保存所有Human实例,仅在程序运行期间有效,退出后自动销毁。__init__方法自动完成实例存储与人数统计,无需手动调用额外方法。get_info方法统一格式化单个用户的信息,方便展示。list_all_humans类方法遍历所有实例,返回汇总的用户数据。search_by_name类方法通过姓名匹配过滤实例,返回搜索结果。
内容的提问来源于stack exchange,提问作者Markéta Pipreková
相关产品推荐
相关产品推荐

