标签:传参 函数 open 接口 成绩 程序设计 保存 dir 文件
首先介绍面向对象的一些概念:
对象:对象是有属性和方法组成的,在实际环境中也就是对象本身的变量和函数!
类的定义:
class Fish(object): eyes = 2 def get_eye(self): return self.eyes def set_eye(self, eye): self.eyes = eye
继承:继承可以使子类拥有父类的属性和方法,并且可以重些这些方法,加强代码的复用性,python中子类可以有多个父类,但是不建议这样使用,一般会产生重复调用的问题,Super().方法名,可以调用父类的方法(不用传参,作用是调用父类的方法,传的是子类实例的值)例如:
class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class Student(People): def __init__(self,name,age,sex,password): People.__init__(self,name,age,sex) self.course=[] self.password=password
组合:当几个对象是水平方向的时候,就应该考虑用组合,当对象是纵向的时候用继承。组合就是用一个类把2个平级层次的对象放在一起,例如:
class Equip: #武器装备类 def fire(self): print(‘release Fire skill‘) class Riven: #英雄Riven的类,一个英雄需要有装备,因而需要组合Equip类 camp=‘Noxus‘ def __init__(self,nickname): self.nickname=nickname self.equip=Equip() #用Equip类产生一个装备,赋值给实例的equip属性 r1=Riven(‘锐雯雯‘) r1.equip.fire() #可以使用组合的类产生的对象所持有的方法
下面介绍下绑定方法和非绑定方法:
一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):
1. 绑定到类的方法:用classmethod装饰器装饰的方法。
为类量身定制
类.boud_method(),自动将类当作第一个参数传入
(其实对象也可调用,但仍将类当作第一个参数传入)
2. 绑定到对象的方法:没有被任何装饰器装饰的方法。
为对象量身定制
对象.boud_method(),自动将对象当作第一个参数传入
(属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)
二:非绑定方法:用staticmethod装饰器装饰的方法
1. 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已
注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说
练习:
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
下面列出了几个我写的函数,只写了一部分功能。
#coding:utf-8 import pickle import os class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class Course: def __init__(self,name,period,price): self.name=name self.period=period self.price=price class School: def __init__(self,location): self.location=location #self.course=course.__init__() self.course=[] self.jiangshi=[] self.banji=[] school_name=‘oldboy‘ class Student(People): def __init__(self,name,age,sex,password): People.__init__(self,name,age,sex) self.course=[] self.password=password # pass class Teacher(People): def __init__(self,name,age,sex,password): People.__init__(self,name,age,sex) self.course=[] self.banji=[] self.password=password class Banji: def __init__(self,name,teacher,course,school): self.teacher=teacher self.course=course self.student=[] self.name=name self.school=school # Shanghai=School(‘shanghai‘) Beijing=School(‘Beijing‘) python=Course(‘python‘,‘6‘,‘9999‘) linux=Course(‘linux‘,‘6‘,‘8000‘) go=Course(‘go‘,‘12‘,‘12000‘) # egon=Teacher(‘egon‘,‘18‘,‘mail‘) Shanghai.course.append(go) Beijing.course.append(linux) Beijing.course.append(python) # go_class=Banji(‘egon‘,‘go‘) def class_create(): name=input(‘请输入班级名称:‘) teacher=input(‘请输入老师名称:‘) course=input(‘请输入课程名称:‘) #city=input(‘‘) #banji=Banji(name,teacher,course) if course==‘go‘: banji = Banji(name, teacher, course,‘shanghai‘) Shanghai.banji.append(banji) os.chdir(‘D:\project\作业7\class_group‘) with open(name,‘wb‘) as write_f: pickle.dump(banji,write_f) print(‘创建成功‘) elif course==‘linux‘ or course==‘python‘: banji = Banji(name, teacher, course,‘beijing‘) Beijing.banji.append(banji) os.chdir(‘D:\project\作业7\class_group‘) with open(name,‘wb‘) as write_f1: pickle.dump(banji,write_f1) print(‘创建成功‘) else: print(‘没有此课程‘) return 0 return banji def student_create(name,age,sex,password): # name=input(‘请输入姓名:‘) # password=input(‘请输入密码:‘) # age=input(‘请输入年龄:‘) # sex=input(‘请输入性别:‘) #city=input(‘请输入所在城市:‘) student=Student(name,age,sex,password) os.chdir(‘D:\project\作业7student_group‘) with open(name,‘ab‘)as write_f: pickle.dump(student,write_f) return student def login(roal,name,password): #if os.path.exists() if roal==‘student‘: os.chdir(‘D:\project\作业7\student_group‘) if os.path.exists(name)==False: return 0 with open(name,‘rb‘) as read_f: if pickle.load(read_f).name==name and pickle.load(read_f).password==password: print(‘登录成功!‘) return 1 else: print(‘error‘) return 0 elif roal==‘teacher‘: os.chdir(‘D:\project\作业7\Teacher_group‘) if os.path.exists(name) == False: return 0 with open(name,‘rb‘) as read_f: if pickle.load(read_f).name==name and pickle.load(a).password==password: print(‘登录成功!‘) return 1 else: print(‘error‘) return 0 def course_create(): name=input(‘请输入课程名:‘) period=input(‘请输入课程周期:‘) price=input(‘请输入价格:‘) course=Course(name,period,price) os.chdir(‘D:\project\作业7\course_group‘) with open (name,‘wb‘)as read_f: pickle.dump(course,read_f) print(‘创建成功‘) return course # def xuanke(name): # print(‘可选课程如下:‘) # os.listdir(‘class_group‘) # a=input(‘请输入课程名:‘) # # os.chdir(‘student_group‘) # with open(name,‘rb‘) as read_f: # b=pickle.load(read_f) # # pickle.load() # with open (name,‘rb‘) as read_f: # city = input(‘请输入课程序号:1.go 2.linux 3.python‘) # if city==‘1‘: # for a in os.listdir(‘D:\project\作业7\student_group‘): # print (a) def teacher_create(name,age,sex,password): teacher = Teacher(name, age, sex, password) os.chdir(‘D:\project\作业7\Teacher_group‘) with open(name, ‘ab‘)as write_f: pickle.dump(teacher, write_f) print(‘创建成功‘) return teacher while True: a=input(‘请选择用户:1.管理员 2:学生 3:老师‘) if a==‘1‘: b=input(‘请选择需要的操作编号:1.创建讲师 2.创建班级 3.创建课程‘) if b==‘1‘: name=input(‘请输入姓名:‘) age=input(‘请输入年龄:‘) sex=input(‘请输入性别:‘) password=input(‘请输入密码:‘) teacher_create(name,age,sex,password) elif b==‘2‘: class_create() elif b==‘3‘: course_create() else: print(‘无此选项‘) continue elif a==‘2‘: name=input(‘请输入姓名:‘) password=input(‘请输入密码:‘) c=login(‘student‘,name,password) if c==0 : print(‘请注册‘) name = input(‘请输入姓名:‘) age = input(‘请输入年龄:‘) sex = input(‘请输入性别:‘) password = input(‘请输入密码:‘) student_create(name,age,sex,password) else: print(‘没有此选项‘) break
标签:传参 函数 open 接口 成绩 程序设计 保存 dir 文件
原文地址:http://www.cnblogs.com/qianmeng/p/7389071.html