一、类和对象
- 类就是拥有相同属性和相同功能的对象的集合(抽象)
- 对象就是类的实例(具体)
比如人类是一个抽象的概念,具体的某个人就是对象。下面一个小例子感受一下
- 创建一个学生类:
属性:姓名,年龄,学号
方法:答到,展示学生信息 - 创建一个班级类:
属性:学生,班级名
方法:添加学生,删除学生,点名, 求班上学生的平均年龄
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'<name:{self.name} age:{self.age} stuid:{self.study_id}>'
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()