============================================
这是一个"用户信息读取器"
功能:把用户数据存起来,方便后面用
============================================
——————————————–
第一块:定义一个"类"(相当于造一个模板/模具)
——————————————–
class UserReader:
"""
类 = 模板
就像做蛋糕的模具,用这个模具可以造出很多个"蛋糕对象"
每个蛋糕都有自己的数据,但结构一样
"""
# —————————————-
# 第二块:类变量(所有对象共享的数据)
# —————————————-
DEFAULT_DATA = [
"张三,男,21", # ✅ 注意:英文逗号 , 不是中文逗号 ,
"李四,女,22",
"王五,男,27",
]
# 这个数据所有 UserReader 对象都能用
# 相当于模具自带的默认配方
# —————————————-
# 第三块:__init__ 方法(初始化/构造方法)
# —————————————-
def __init__(self, data=None):
"""
__init__ = 初始化方法
作用:创建对象时自动执行,用来准备初始数据
self = 当前对象自己
就像说"我的名字"、"我的年龄"
data = 外部传入的数据,可选
如果不传,就用默认的 DEFAULT_DATA
"""
# 三元表达式:如果 data 有值就用 data,否则用 DEFAULT_DATA
self._data = data if data is not None else self.DEFAULT_DATA
# self._users = 空列表,用来存解析后的用户字典
# _ 开头 = 私有的,外面不要直接动,通过方法访问
self._users = []
# —————————————-
# 第四块:read 方法(读取/解析数据)
# —————————————-
def read(self):
"""
read = 读取方法
作用:把 _data 里的字符串,解析成字典列表
流程:
1. 遍历每一行数据
2. 去掉空格换行
3. 跳过空行
4. 按逗号切开
5. 转成字典,加到 _users 列表
"""
try: # ← 开始尝试执行下面的代码
for line in self._data: # ← 遍历每一行数据
line = line.strip() # ← 去掉首尾空格和换行符
if not line: # ← 如果是空行(没有内容)
continue # ← 跳过,继续下一行
# 按英文逗号切成3段
# "张三,男,21" → ["张三", "男", "21"]
name, sex, age = line.split(",")
# 把这3段拼成字典,加到列表里
self._users.append({
"name": name, # 名字
"sex": sex, # 性别
"age": int(age) # 年龄转成整数("21" → 21)
})
except Exception as e: # ← 如果上面任何一步出错
print(f"解析出错:{e}") # ← 打印错误信息,不崩程序
return self._users # ← 返回结果
# —————————————-
# 第五块:@property 装饰器(把方法变成属性)
# —————————————-
@property
def users(self):
"""
@property = 把方法变成属性
正常调用:reader.users() ← 要加括号
用了 @property:reader.users ← 不用加括号,像访问变量一样
作用:只能读,不能改(保护数据)
"""
return self._users # ← 返回内部的 _users 列表
============================================
第六块:使用这个类(造蛋糕,用蛋糕)
============================================
造一个对象(用模具造一个蛋糕)
reader = UserReader() # ← 不传 data,用默认的 DEFAULT_DATA
调用 read 方法(让它去读取数据)
reader.read() # ← 执行解析
用 @property 访问结果(直接当属性用,不用括号)
print(reader.users) # ← 输出解析后的用户列表









