zoukankan      html  css  js  c++  java
  • Python--面向对象的程序设计之组合应用、开发软件规范

    组合应用:

    class Teacher:
        def __init__(self,name,age,sex,salary,level):
            self.name=name
            self.age=age
            self.sex=sex
            self.salary=salary
            self.level=level
    
        def walk(self):
            print('%s is walking'%self.name)
    
        def teach(self):
            print('%s is teaching'%self.name)
    
        def tell_info(self):
            print('''
            ----------%s info--------
            NAME:%s
            AGE:%s
            SEX:%s
            SAL:%s
            LEVEL:%s
            '''%(self.name,self.name,self.age,self.sex,self.salary,self.level))
    class Date:
        def __init__(self,year,mon,day):
            self.year=year
            self.mon=mon
            self.day=day
    
        def tell_birth(self):
            print('%s-%s-%s'%(self.year,self.mon,self.day))

    alex=Teacher('alex',84,'male',30000,-1)
    Birth=Date(1900,13,43)
    alex.birth=Birth

    alex.tell_info()
    print(alex.birth) #<__main__.Date object at 0x00000000027B2860>
    alex.birth.tell_birth()
    运行结果:

            ----------alex info--------
            NAME:alex
            AGE:84
            SEX:male
            SAL:30000
            LEVEL:-1
            
    <__main__.Date object at 0x00000000027B2860>
    1900-13-43

    改动Date类,表明是谁的生日:

    class Date:
        def __init__(self,name,year,mon,day):
            self.name=name
            self.year=year
            self.mon=mon
            self.day=day
    
        def tell_birth(self):
            print('%s:%s-%s-%s'%(self.name,self.year,self.mon,self.day))
    
    alex=Teacher('alex',84,'male',30000,-1)
    Birth=Date(alex.name,1900,13,43)
    alex.birth=Birth
    
    alex.birth.tell_birth()
    运行结果:
    alex:1900-13-43

    组合的应用:

    class Teacher:
        def __init__(self,name,age,sex,salary,level):
            self.name=name
            self.age=age
            self.sex=sex
            self.salary=salary
            self.level=level
    
        def walk(self):
            print('%s is walking'%self.name)
    
        def teach(self):
            print('%s is teaching'%self.name)
    
        def tell_info(self):
            print('''
            ----------%s info--------
            NAME:%s
            AGE:%s
            SEX:%s
            SAL:%s
            LEVEL:%s
            '''%(self.name,self.name,self.age,self.sex,self.salary,self.level))
    
    
    class Student:
        def __init__(self,name,age,sex,group):
            self.name=name
            self.age=age
            self.sex=sex
            self.group=group
    
        def walk(self):
            print('%s is walking'%self.name)
    
        def study(self):
            print('%s is studying'%self.name)
    
        def tell_info(self):
            print("""
            -------%s info-------
            NAME:%s
            AGE:%s
            SEX:%s
            GROUP:%s
            """%(self.name,self.name,self.age,self.sex,self.group))
    
    class Course:
        def __init__(self,name,price,period):
            self.name=name
            self.price=price
            self.period=period
    
        def tell_course(self):
            print('''
            ------%s info------
            course name:%s
            course price:%s
            course period:%s
            '''%(self.name,self.name,self.price,self.period))
    
    alex=Teacher('alex',84,'male',30000,-1)
    xiaohuang=Student('xiaohuang',73,'male','group8')
    python=Course('Python',15800,'6 mons')
    linux=Course('Linux',12800,'3 mons')
    go=Course('Go',9800,'4 mons')
    
    alex.courses=[]
    alex.courses.append(python)
    alex.courses.append(go)
    print(alex.courses)  #[<__main__.Course object at 0x0000000001EAA128>, <__main__.Course object at 0x0000000001E98CC0>]
    
    
    xiaohuang.courses=[]
    xiaohuang.courses.append(python)
    print(xiaohuang.courses)  #[<__main__.Course object at 0x0000000001EAA128>]
    运行结果:
    [<__main__.Course object at 0x0000000001EAA128>, <__main__.Course object at 0x0000000001E98CC0>]
    [<__main__.Course object at 0x0000000001EAA128>]

    进一步优化,可以查看对象的课程:

    class Teacher:
        def __init__(self,name,age,sex,salary,level):
            self.name=name
            self.age=age
            self.sex=sex
            self.salary=salary
            self.level=level
            self.courses = []
    
        def walk(self):
            print('%s is walking'%self.name)
    
        def teach(self):
            print('%s is teaching'%self.name)
    
        def tell_info(self):
            print('''
            ----------%s info--------
            NAME:%s
            AGE:%s
            SEX:%s
            SAL:%s
            LEVEL:%s
            '''%(self.name,self.name,self.age,self.sex,self.salary,self.level))
    
        def tell_course(self):  #self=egon 
            if 'courses' in self.__dict__:  #'courses' in egon.__dict__
                for obj in self.courses:
                    obj.tell_course()
    
    class Course:
        def __init__(self,name,price,period):
            self.name=name
            self.price=price
            self.period=period
    
        def tell_course(self):
            print('''
            ------%s info------
            course name:%s
            course price:%s
            course period:%s
            '''%(self.name,self.name,self.price,self.period))
    
    egon=Teacher('egon',18,'male',30000,10)
    python=Course('Python',15800,'6 mons')
    linux=Course('Linux',12800,'3 mons')
    go=Course('Go',9800,'4 mons')
    
    egon.courses.append(python)
    egon.courses.append(go)
    egon.tell_course()

    我们需要注意一点:

    序列化:

    import pickle
    xiaohuang=Student('xiaohuang',73,'male','group8')
    python=Course('Python',15800,'6 mons')
    linux=Course('Linux',12800,'3 mons')
    go=Course('Go',9800,'4 mons')
    
    xiaohuang.courses.append(python)
    xiaohuang.courses.append(go)
    res=pickle.dumps(xiaohuang)
    print(res)
    
    with open('studentdb.pkl','wb') as f:
        f.write(res)
    
    运行结果:
    b'x80x03c__main__
    Student
    qx00)x81qx01}qx02(Xx04x00x00x00nameqx03X	x00x00x00xiaohuangqx04Xx03x00x00x00ageqx05KIXx03x00x00x00sexqx06Xx04x00x00x00maleqx07Xx05x00x00x00groupqx08Xx06x00x00x00group8q	Xx07x00x00x00coursesq
    ]qx0b(c__main__
    Course
    qx0c)x81q
    }qx0e(hx03Xx06x00x00x00Pythonqx0fXx05x00x00x00priceqx10Mxb8=Xx06x00x00x00periodqx11Xx06x00x00x006 monsqx12ubhx0c)x81qx13}qx14(hx03Xx02x00x00x00Goqx15hx10MH&hx11Xx06x00x00x004 monsqx16ubeub.'

    注意:json不能序列化对象,我们应该用pickle

    反序列化:

    with open('studentdb.pkl','rb') as f:
        res=f.read()
        obj=pickle.loads(res)
        print(obj)
        obj.tell_info()
    运行结果:
            ------Python info------
            course name:Python
            course price:15800
            course period:6 mons
            
    
            ------Go info------
            course name:Go
            course price:9800
            course period:4 mons

    反序列化一定要基于类在内存里面

    实现与用户交互:

    class Student:
        def __init__(self,name,age,sex,group):
            self.name=name
            self.age=age
            self.sex=sex
            self.group=group
            self.courses = []
    
        def study(self):
            print('%s is studying'%self.name)
    
        def tell_info(self):
            print("""
            -------%s info-------
            NAME:%s
            AGE:%s
            SEX:%s
            GROUP:%s
            """%(self.name,self.name,self.age,self.sex,self.group))
    
        def tell_course(self):
            if 'courses' in self.__dict__:
                for obj in self.courses:
                    obj.tell_course()
    
    name=input('user: ').strip()
    age=int(input('age: ').strip())
    sex=input('sex: ').strip()
    group=input('group: ').strip()
    
    xiaohuang=Student(name,age,sex,group)
    xiaohuang.tell_info()
    运行结果:
    user: xiaohuang
    age: 73
    sex: male
    group: group8
    
            -------xiaohuang info-------
            NAME:xiaohuang
            AGE:73
            SEX:male
            GROUP:group8

    简洁的写法:

    class Student:
        def __init__(self,name,age,sex,group):
            self.name=name
            self.age=age
            self.sex=sex
            self.group=group
            self.courses = []
    
        def study(self):
            print('%s is studying'%self.name)
    
        def tell_info(self):
            print("""
            -------%s info-------
            NAME:%s
            AGE:%s
            SEX:%s
            GROUP:%s
            """%(self.name,self.name,self.age,self.sex,self.group))
    
        def tell_course(self):
            if 'courses' in self.__dict__:
                for obj in self.courses:
                    obj.tell_course()
    
    class Course:
        def __init__(self, name, price, period):
            self.name = name
            self.price = price
            self.period = period
    
        def tell_course(self):
            print('''
            ------%s info------
            course name:%s
            course price:%s
            course period:%s
            ''' % (self.name, self.name, self.price, self.period))
    
    import pickle
    xiaohuang=Student('xiaohuang',18,'male','group8')
    with open('studentdb.pkl','wb') as f:
        pickle.dump(xiaohuang,f)
    
    with open('studentdb.pkl','rb') as f:
        obj=pickle.load(f)
        obj.tell_info()
    运行结果:
            -------xiaohuang info-------
            NAME:xiaohuang
            AGE:18
            SEX:male
            GROUP:group8
            

    模块的运用:

    先定义一下几个文件:

    各文件内容如下:

    models.py:

    class Student:
        def __init__(self,name,age,sex,group):
            self.name=name
            self.age=age
            self.sex=sex
            self.group=group
            self.courses = []
    
        def study(self):
            print('%s is studying'%self.name)
    
        def tell_info(self):
            print("""
            -------%s info-------
            NAME:%s
            AGE:%s
            SEX:%s
            GROUP:%s
            """%(self.name,self.name,self.age,self.sex,self.group))

    pickle_obj.py:

    import pickle
    
    def get_obj():
        with open('studentdb.pkl', 'rb') as f:
            res=f.read()
            obj=pickle.loads(res)
            obj.tell_info()
    
        with open('studentdb.pkl', 'rb') as f:
            obj = pickle.load(f)
            obj.tell_info()

    start.py:

    from models import Student
    
    import pickle_obj
    
    pickle_obj.get_obj()

    还有我们事先准备好的studentdb.pkl文件。

    运行start.py文件,效果如下:

            -------xiaohuang info-------
            NAME:xiaohuang
            AGE:18
            SEX:male
            GROUP:group8

    接下来看开发软件的规范:

    bin文件夹一般放可执行文件,conf文件夹一般放可配置文件,db文件夹一般方法数据文件,还有log目录,lib目录(一般存放常用小工具),src目录放核心,类,逻辑等

    开发选课系统:

    main函数提供菜单,用户可以选择
    今天作业:老师,学生,课程三个类实现选课系统
  • 相关阅读:
    什么是二进制补码
    第四章 VB程序的控制结构
    第三章 VB的程序设计基础
    C#學習基礎方法
    C#學習基礎繼承
    C#學習基礎變量和常量
    C#學習基礎域和屬性
    第八章 VB中ActiveX控件的使用
    写给WEB2.0的站长 不仅仅是泼冷水(转)
    常见错误和难点分析
  • 原文地址:https://www.cnblogs.com/metianzing/p/7119208.html
Copyright © 2011-2022 走看看