面向对象编程

一、类和对象

  • 类就是拥有相同属性和相同功能的对象的集合(抽象)
  • 对象就是类的实例(具体)

比如人类是一个抽象的概念,具体的某个人就是对象。下面一个小例子感受一下

  • 创建一个学生类:
    属性:姓名,年龄,学号
    方法:答到,展示学生信息
  • 创建一个班级类:
    属性:学生,班级名
    方法:添加学生,删除学生,点名, 求班上学生的平均年龄
class Student:
    def __init__(self, name='', age=18, study_id='000'):
        self.name = name
        self.age = age
        self.study_id = study_id

    def response(self):
        print(f'{self.name}, 到!')

    def show_message(self):
        print(f'姓名:{self.name} 年龄:{self.age} 学号:{self.study_id}')

    def __repr__(self):
        # 当通过print打印当前类的对象的时候会自动调用这个函数,获取函数的返回值为打印的值(返回值必须是字符串)
        return f''


stu1 = Student('小明')
print('stu1:', stu1)


class Class:
    def __init__(self, name, students=[]):
        self.students = students
        self.class_name = name
        self.max_student_count = 50
        #列表生成式的[]变成()就是生成式了,id使用迭代器
        self.create_id = (self.class_name+str(x).zfill(2) for x in range(1, self.max_student_count+1))

    def __repr__(self):
        return f'{self.students}'

    def add_student(self):
        name = input('姓名:')
        age = int(input('年龄:'))
        stu_id = next(self.create_id)
        stu = Student(name, age, stu_id)
        self.students.append(stu)

    def del_student(self):
        name = input('请输入删除学生的姓名:')
        for stu in self.students[:]:
            if stu.name == name:
                self.students.remove(stu)
        print(self.students)

    def call_the_roll(self):
        for stu in self.students:
            print(stu.name)
            if randint(0, 1) == 1:
                stu.response()
            else:
                print(f'{stu.name}缺席!')

    def average_age(self):
        ages = reduce(lambda x, y: x+y.age, self.students, 0)
        return ages / len(self.students)


c1 = Class('py2002')
c1.add_student()
c1.add_student()
print(c1.students)

print(c1.average_age())
print(c1)
c1.del_student()
c1.call_the_roll()

你可能感兴趣的:(面向对象编程)