编写学生类

具有以下属性:

类属性 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文件,这是一种常见的数据持久化方法。
 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值