HJW20 2 months ago
parent bf6a570974
commit 48034a176b

@ -0,0 +1,67 @@
from datetime import date
from typing import Optional, Union
from dataclasses import dataclass
@dataclass
class Student:
name: str
id_card: str
stu_id: str
gender: Optional[bool] = None # True:男, False:女
height: Optional[int] = None # cm
weight: Optional[float] = None # kg
enrollment_date: Optional[Union[date, str]] = None
class_name: Optional[str] = None
major: Optional[str] = None
@property
def age(self) -> int:
"""从身份证号计算年龄(周岁)"""
from utils.id_utils import calculate_age
return calculate_age(self.id_card)
@property
def birthday(self) -> date:
"""从身份证号提取出生日期"""
from utils.id_utils import extract_birthday
return extract_birthday(self.id_card)
def to_dict(self) -> dict:
"""将学生对象转换为字典"""
return {
'name': self.name,
'id_card': self.id_card,
'stu_id': self.stu_id,
'gender': self.gender,
'height': self.height,
'weight': self.weight,
'enrollment_date': self.enrollment_date.isoformat()
if isinstance(self.enrollment_date, date) else self.enrollment_date,
'class_name': self.class_name,
'major': self.major
}
@classmethod
def from_dict(cls, data: dict) -> 'Student':
"""从字典创建学生对象"""
from datetime import datetime
enrollment_date = data.get('enrollment_date')
if enrollment_date and isinstance(enrollment_date, str):
try:
enrollment_date = datetime.strptime(enrollment_date, '%Y-%m-%d').date()
except ValueError:
pass
return cls(
name=data['name'],
id_card=data['id_card'],
stu_id=data['stu_id'],
gender=data.get('gender'),
height=data.get('height'),
weight=data.get('weight'),
enrollment_date=enrollment_date,
class_name=data.get('class_name'),
major=data.get('major')
)
Loading…
Cancel
Save