1. 实体类 (Entity)
(1)实体类的代码
class User:
def __init__(self, user_id: int, username: str, email: str):
self.user_id = user_id
self.username = username
self.email = email
def __repr__(self):
return f"User(id={self.user_id}, username='{self.username}', email='{self.email}')"
#当你创建一个 User 对象并打印它时,__repr__方法会被自动调用:
user = User(1, "Alice", "alice@example.com")
print(user) # 输出: User(id=1, username='Alice', email='alice@example.com')
(2)实体类代码的详细注释
# 定义 User 类,用于表示用户对象
class User:
"""
用户类,包含用户的唯一标识符、用户名和电子邮件地址。
Attributes:
user_id (int): 用户的唯一标识符。
username (str): 用户名。
email (str): 用户的电子邮件地址。
"""
def __init__(self, user_id: int, username: str, email: str):
"""
初始化 User 类的新实例。
Args:
user_id (int): 用户的唯一标识符。
username (str): 用户名。
email (str): 用户的电子邮件地址。
"""
self.user_id = user_id # 将传入的 user_id 赋值给实例变量 user_id
self.username = username # 将传入的 username 赋值给实例变量 username
self.email = email # 将传入的 email 赋值给实例变量 email
def __repr__(self) -> str:
"""
返回一个可用于调试的字符串表示形式。
Returns:
str: 表示 User 对象的字符串,格式为 "User(id=<user_id>, username='<username>', email='<email>')".
"""
return f"User(id={self.user_id}, username='{self.username}', email='{self.email}')"
# 示例用法:
if __name__ == "__main__":
# 创建一个新的 User 实例
user = User(user_id=1, username="Alice", email="alice@example.com")
# 打印 User 实例,将调用 __repr__ 方法
print(user)
(3)实体类代码的讲解
【1】类定义:
- class User::定义了一个名为 User 的类。这个类用来表示系统中的用户对象,每个用户有唯一的标识符 (user_id)、用户名 (username) 和电子邮件地址 (email)。
【2】构造方法 (__init__):
- def __init__(self, user_id: int, username: str, email: str)::这是类的构造方法,用于初始化新创建的 User 对象。它接受三个参数:
- user_id(整数类型):用户的唯一标识符。
- username(字符串类型):用户的用户名。
- email(字符串类型):用户的电子邮件地址。
- 在构造方法中,这三个参数分别赋值给实例变量 self.user_id、self.username 和 self.email,这些变量在后续使用时可以通过 self 访问。
【3】字符串表示方法 (__repr__):
- def __repr__(self) -> str::这是一个特殊的方法,用于返回对象的“官方”字符串表示形式。当调用 print(user) 或者将对象传递给调试工具时,会调用此方法。
- return f"User(id={self.user_id}, username='{self.username}', email='{self.email}')":返回一个格式化的字符串,包含 user_id、username 和 email 的信息。这使得调试和日志记录更加直观。
【4】示例用法:
- if __name__ == "__main__"::这段代码确保只有在直接运行该文件时才会执行下面的代码块,而不会在导入模块时执行。
- 创建了一个新的 User 实例,并通过 print 函数打印出来,以展示 __repr__ 方法的效果。
2. 数据访问层接口 (DAO Interface)
(1)数据访问层代码
'''
ABC(Abstract Base Class)和 abstractmethod 是 Python 中用于定义抽象基类及其抽象方法的工具。它们属于 abc 模块,提供了类似于Java
中接口和抽象类的功能。通过使用 ABC 和 abstractmethod,你可以确保某些类实现了特定的方法,从而提高代码的可维护性和可扩展性。
'''
from abc import ABC, abstractmethod
class UserDao(ABC):
@abstractmethod
def get_user_by_id(self, user_id: int) -> User:#返回值类型为User
pass
@abstractmethod
def add_user(self, user: User) -> None:
pass
@abstractmethod
def update_user(self, user: User) -> None:
pass
@abstractmethod
def delete_user(self, user_id: int) -> None:
pass
(2)数据访问层代码的详细注释
from abc import ABC, abstractmethod
from typing import Optional # 导入 Optional 用于返回值类型的可选性(如果需要)
# 导入 User 类,假设它在同一个文件中或已经导入
# from .user import User # 如果 User 类在另一个模块中
class UserDao(ABC):
"""
用户数据访问对象 (User Data Access Object) 的抽象基类。
这个类定义了一组接口方法,用于与用户数据存储进行交互。
所有具体的用户数据访问实现类都必须继承自这个抽象类,并实现这些抽象方法。
Attributes:
None (这是一个抽象基类,不包含具体属性)
"""
@abstractmethod
def get_user_by_id(self, user_id: int) -> Optional[User]:
"""
根据用户 ID 获取用户对象。
Args:
user_id (int): 用户的唯一标识符。
Returns:
Optional[User]: 如果找到用户,则返回对应的 User 对象;否则返回 None。
"""
pass
@abstractmethod
def add_user(self, user: User) -> None:
"""
添加一个新的用户到数据存储中。
Args:
user (User): 要添加的用户对象。
Returns:
None
"""
pass
@abstractmethod
def update_user(self, user: User) -> None:
"""
更新数据存储中的用户信息。
Args:
user (User): 包含更新后信息的用户对象。
Returns:
None
"""
pass