码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象程序设计

时间:2017-08-18 13:38:50      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:传参   函数   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!