具有以下属性:
类属性 role,赋值'student'实例属性:信息列表, 包含: 学号,姓名,性别,年龄,成绩列表
类方法:更改类属性值。实例方法:构造函数 打印学生信息函数 修改学生信息函数
main函数主体:创建学生类信息空列表,输入学生信息,将学生信息放入学生类信息列表将该列表写入到一个csv文件中保存。
class Student:
# 类属性
role = 'student'
def __init__(self, student_id, name, gender, age, grades):
# 实例属性
self.student_id = student_id
self.name = name
self.gender = gender
self.age = age
self.grades = grades
# 实例方法:打印学生信息
def print_info(self):
print(f"学号: {self.student_id}, 姓名: {self.name}, 性别: {self.gender}, 年龄: {self.age}, 成绩: {self.grades}")
# 实例方法:修改学生信息
def update_info(self, **kwargs):
for key, value in kwargs.items():
if hasattr(self, key):
setattr(self, key, value)
else:
print(f"属性 {key} 不存在,无法更新。")
# 类方法:更改类属性值(这里我们假设仅允许修改role)
@classmethod
def change_role(cls, new_role):
if isinstance(new_role, str):
cls.role = new_role
else:
print("新的角色必须是字符串类型。")
# main函数主体
def main():
# 创建学生类信息空列表
students = []
# 假设我们有一些学生信息需要输入(这里使用硬编码代替实际输入)
student_infos = [
('001', '张三', '男', 18, [90, 85, 92]),
('002', '李四', '女', 19, [88, 91, 89]),
# ... 可以继续添加学生信息
]
# 将学生信息放入学生类信息列表
for info in student_infos:
student = Student(*info)
students.append(student)
# 将该列表写入到一个csv文件中保存
with open('students.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['学号', '姓名', '性别', '年龄', '成绩']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for student in students:
writer.writerow({
'学号': student.student_id,
'姓名': student.name,
'性别': student.gender,
'年龄': student.age,
'成绩': ','.join(map(str, student.grades)) # 将成绩列表转换为逗号分隔的字符串
})
print("学生信息已保存到CSV文件。")
# 调用main函数
if __name__ == "__main__":
main()
这段代码定义了一个 `Student` 类,用于表示学生信息,并提供了一些基本操作,如打印学生信息、更新学生信息、更改类属性等。此外,代码中还包含了一个 `main` 函数,用于创建学生对象列表,并将这些信息保存到CSV文件中。以下是对代码中每部分的分析:
### 类定义和类属性
```python
class Student:
role = 'student' # 类属性,属于类的所有实例共享
```
### 构造函数和实例属性
```python
def __init__(self, student_id, name, gender, age, grades):
self.student_id = student_id # 实例属性,每个实例都有自己的值
self.name = name
self.gender = gender
self.age = age
self.grades = grades
```
构造函数 `__init__` 用于初始化学生对象,设置学生的学号、姓名、性别、年龄和成绩。
### 实例方法:打印学生信息
```python
def print_info(self):
print(f"学号: {self.student_id}, 姓名: {self.name}, 性别: {self.gender}, 年龄: {self.age}, 成绩: {self.grades}")
```
`print_info` 方法用于打印学生的所有信息。
### 实例方法:修改学生信息
```python
def update_info(self, **kwargs):
for key, value in kwargs.items():
if hasattr(self, key):
setattr(self, key, value)
else:
print(f"属性 {key} 不存在,无法更新。")
```
`update_info` 方法接受任意数量的关键字参数,允许动态更新实例的属性。
### 类方法:更改类属性值
```python
@classmethod
def change_role(cls, new_role):
if isinstance(new_role, str):
cls.role = new_role
else:
print("新的角色必须是字符串类型。")
```
`change_role` 是一个类方法,用于更改类属性 `role` 的值。它接受一个参数 `new_role`,并检查这个参数是否为字符串类型。
### main函数主体
```python
def main():
# 创建学生类信息空列表
students = []
# 假设我们有一些学生信息需要输入
student_infos = [
# ... 学生信息元组列表 ...
]
# 将学生信息放入学生类信息列表
for info in student_infos:
student = Student(*info)
students.append(student)
# 将该列表写入到一个csv文件中保存
with open('students.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['学号', '姓名', '性别', '年龄', '成绩']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for student in students:
writer.writerow({
'学号': student.student_id,
'姓名': student.name,
'性别': student.gender,
'年龄': student.age,
'成绩': ','.join(map(str, student.grades)) # 将成绩列表转换为字符串
})
print("学生信息已保存到CSV文件。")
```
`main` 函数首先创建一个空列表 `students`,然后通过硬编码的学生信息创建 `Student` 对象,并将它们添加到列表中。之后,使用 `csv.DictWriter` 将学生信息写入到 `students.csv` 文件中。最后,打印一条消息表示信息已保存。
### 程序入口
```python
if __name__ == "__main__":
main()
```
这一部分是Python程序的常规入口,如果这个脚本是作为主程序运行的,将调用 `main` 函数。
### 综合分析
这段代码演示了如何使用类来封装数据和行为,如何使用类属性和实例属性,以及如何通过方法来操作这些数据。同时,它还展示了如何将对象列表写入CSV文件,这是一种常见的数据持久化方法。