首先介绍面向对象的一些概念:

对象:对象是有属性和方法组成的,在实际环境中也就是对象本身的变量和函数!

类的定义:

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

 

posted on 2017-08-18 12:55  大刀孟爷  阅读(186)  评论(0编辑  收藏  举报