Python 创建一个 Employee 类,包含工号、姓名、薪水等属性,并实现工号查询功能(超详细)

Python 创建一个 Employee 类,包含工号、姓名、薪水等属性,并实现工号查询功能

快速解决

Python 创建一个 Employee 类,包含工号、姓名、薪水等属性,并实现工号查询功能,核心代码如下:

class Employee:
    def __init__(self, emp_id, name, salary):
        self.emp_id = emp_id   # 初始化工号属性
        self.name = name       # 初始化姓名属性
        self.salary = salary   # 初始化薪水属性

    @classmethod
    def find_by_id(cls, employees, emp_id):
        return next((e for e in employees if e.emp_id == emp_id), None)  # 通过工号查询员工

常用方法

方法类型 实现方式 使用场景 代码复杂度
类方法查询 @classmethod装饰器 员工列表查询 ★★★☆☆
实例方法查询 search()方法 小型数据集 ★★☆☆☆
字典缓存查询 使用字典存储员工数据 高频查询场景 ★★★★☆
多线程安全查询 threading.Lock 并发环境查询 ★★★★☆
SQLAlchemy查询 ORM框架实现 数据库交互 ★★★★☆

详细说明

类方法实现查询

class Employee:
    def __init__(self, emp_id, name, salary):
        self.emp_id = emp_id
        self.name = name
        self.salary = salary

    @classmethod
    def find_by_id(cls, employees, emp_id):
        return next((e for e in employees if e.emp_id == emp_id), None)
  • @classmethod装饰器允许方法访问类属性
  • next()函数配合生成器表达式实现高效查询
  • None作为默认值处理未查询到的情况

实例方法实现查询

class EmployeeDatabase:
    def __init__(self):
        self.employees = []  # 初始化员工列表

    def add_employee(self, emp_id, name, salary):
        self.employees.append(Employee(emp_id, name, salary))  # 添加员工对象

    def find_by_id(self, emp_id):
        for e in self.employees:
            if e.emp_id == emp_id:  # 逐个比对工号
                return e
        return None  # 未找到返回None

字典缓存优化查询

class EmployeeCache:
    def __init__(self):
        self.employees = {}  # 使用字典存储员工对象

    def add_employee(self, emp_id, name, salary):
        self.employees[emp_id] = Employee(emp_id, name, salary)  # 以工号为键存储

    def find_by_id(self, emp_id):
        return self.employees.get(emp_id)  # 通过字典键直接获取

高级技巧

多线程安全查询

import threading

class ThreadSafeEmployee:
    def __init__(self):
        self.employees = {}
        self.lock = threading.Lock()  # 创建锁对象

    def add_employee(self, emp_id, name, salary):
        with self.lock:
            self.employees[emp_id] = Employee(emp_id, name, salary)  # 锁定期间添加

    def find_by_id(self, emp_id):
        with self.lock:
            return self.employees.get(emp_id)  # 锁定期间查询

数据库持久化查询

import sqlite3

class EmployeeDB:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)  # 连接数据库
        self._create_table()  # 创建表结构

    def _create_table(self):
        with self.conn:
            self.conn.execute('''
                CREATE TABLE IF NOT EXISTS employees (
                    id INTEGER PRIMARY KEY,
                    name TEXT,
                    salary REAL
                )
            ''')  # 创建员工表

    def add_employee(self, emp_id, name, salary):
        with self.conn:
            self.conn.execute('INSERT INTO employees VALUES (?, ?, ?)', (emp_id, name, salary))  # 插入数据

    def find_by_id(self, emp_id):
        cursor = self.conn.cursor()
        cursor.execute('SELECT * FROM employees WHERE id=?', (emp_id,))
        result = cursor.fetchone()  # 查询单条数据
        return Employee(*result) if result else None

常见问题

如何处理重复工号?

class Employee:
    _ids = set()  # 类属性存储已用工号
    
    def __init__(self, emp_id, name, salary):
        if emp_id in self._ids:
            raise ValueError("工号已存在")  # 检查重复
        self.emp_id = emp_id
        self.name = name
        self.salary = salary
        self._ids.add(emp_id)

如何扩展查询功能?

class Employee:
    def __init__(self, emp_id, name, salary, department):
        self.emp_id = emp_id
        self.name = name
        self.salary = salary
        self.department = department

class EmployeeSystem:
    def __init__(self):
        self.employees = {}

    def add_employee(self, emp_id, **kwargs):  # 支持扩展属性
        self.employees[emp_id] = Employee(emp_id, **kwargs)

    def find_by_id(self, emp_id):
        return self.employees.get(emp_id)

如何实现批量查询?

class EmployeeSystem:
    def __init__(self):
        self.employees = {}  # 存储员工对象

    def add_employees(self, data_list):
        for data in data_list:
            self.employees[data['id']] = Employee(**data)

    def find_by_ids(self, emp_ids):
        return [self.employees.get(emp_id) for emp_id in emp_ids]  # 返回多个结果

总结

本文提供了多种 Python 创建 Employee 类并实现工号查询功能的解决方案,涵盖基本实现、性能优化、线程安全和数据库持久化等场景。