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 类并实现工号查询功能的解决方案,涵盖基本实现、性能优化、线程安全和数据库持久化等场景。