ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

py 单例模式及面向对象选课系统 day 30

2022-04-13 00:01:27  阅读:166  来源: 互联网

标签:__ 30 obj name 选课 self py print pickle


今日学习内容

  • 昨日作业讲解
  • 设计模式之单例模式
  • pickle模块

作业讲解

# 题目
编写元类规定对象的所有数据值转大写
eg:
     obj.name = 'jason'
     print(obj.name)  # JASON

class MytypeClass(type):
    def __call__(self, *args, **kwargs):
        args = [i.upper() for i in args]
        return super().__call__(*args, **kwargs)


class MyClass(metaclass=MytypeClass):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def __setattr__(self, key, value):
        self.__dict__[key] = value.upper()


obj = MyClass('double', 'male')
print(obj.name)  
print(obj.gender)
obj.hobby = 'dbj'
print(obj.hobby)
# 结果
DOUBLE
MALE
DBJ

设计模式

市面上的设计模式有23种,大致可以分为三类:
    1.创建类
    2.结构类
    3.行为类
# 因为目前所学有限,所以只需学习单例模式即可
'使用频率高,学完元类即可使用的模式'


同一个类加括号产生的对象肯定是不一样的
类加括号实例化就会产生一个全新的对象

class Single(type):
      new_obj = None
      def __call__(self, *args, **kwargs):
          if not self.new_obj:
              obj = super().__call__(*args, **kwargs)
              self.new_obj = obj
              return self.new_obj
          return self.new_obj
class MyClass(metaclass=Single):
    def __init__(self, name):
        self.name = name
obj1 = MyClass('jason')
obj2 = MyClass('tony')
print(id(obj1), id(obj2))
print(obj1.__dict__,obj2.__dict__)
'以上仅是单例模式的其中一种表现方式'
https://www.cnblogs.com/Dominic-Ji/p/10525994.html
    
单例模式是指:保证一个类仅有一个实例,并提供一个访问它的全局访问点

pickle模块

# 简介
	pickle模块是Python专用的持久化模块,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存贮
# 缺点
    持久化后的字串是不可认读的,并且只支持Python环境,不能用作与其它语言进行数据交换

# 例子需求:将对象保存到文件,并且取出来之后还可以使用对象的功能   

import pickle

class MyClass(object):
    school = 'school'

    def __init__(self, name):
        self.name = name

    def choose_course(self):
        print('%s正在选课' % self.name)

obj = MyClass('double')
print(obj.school)
# school
obj.choose_course()
# double正在选课

with open(r'%s' % obj.name, 'wb') as f:
    pickle.dump(obj, f)
with open(r'jason', 'rb') as f:
    data = pickle.load(f)
print(data)  # 取出文件中的对象
# <__main__.MyClass object at 0x000001335B8DDA20>
print(data.name) 
# double
print(data.school)
# school


主要的方法:
在pickle中dumps()和loads()操作的是bytes类型,而在使用dump()和lload()读写文件时,要使用rb或wb模式,也就是只接收bytes类型的数据

1. pickle.dump(obj, file)
将Python数据转换并保存到pickle格式的文件内
withopen('data.pickle', 'wb') as f: 			pickle.dump(data, f)
    
2. pickle.dumps(obj)
将Python数据转换为pickle格式的bytes字串
import pickle
dic = {"k1":"v1","k2":123}
s = pickle.dumps(dic)
print(s)

3. pickle.load(file)
从pickle格式的文件中读取数据并转换为Python的类型
withopen('data.pickle', 'rb') as f:
    data = pickle.load(f)
    
4. pickle.loads(bytes_object)
将pickle格式的bytes字串转换为Python的类型
import pickle
dic1 = {"k1":"v1","k2":123}
s = pickle.dumps(dic1)
dic2 = pickle.loads(s)
print(dic2)

选课系统的项目分析

项目的要求

选课系统
	角色:学校、学员、课程、讲师
	要求:
        1. 创建北京、上海这2所学校
        2. 创建linux , python , go这3个课程 ,linux\py在北京开, go在上海开
        3. 课程包含:周期,价格,通过学校创建课程 
        4. 通过学校创建班级, 班级关联课程、讲师
        5. 创建学员时,选择学校,关联班级
        6. 创建讲师角色时要关联学校
        7. 提供三个角色接口  
        	7.1 学员视图: 可以注册,交学费,选择班级  
            7.2 讲师视图: 讲师可管理自己的班级,上课时选择班级,查看班级学员列表,修改所管理的学员的成绩   
            7.3 管理视图:创建讲师,创建班级,创建课程
		8. 上面的操作产生的数据都通过pickle序列化保存到文件里

项目的架构

# 三层架构展示
首先是展示层:
	包括管理员视图、学生视图、讲师视图
其次是后台核心程序:
    管理员功能、学生功能、讲师功能
最后是数据层:
	models.by(存放以上三个角色的类数据)
	db_hanlter(存取数据的功能文件)
	Admin(存放管理员的信息)
    Teacher(存放教师的信息)
    Student(存放学生的信息)

项目目录搭建

启动文件        ---> start.py
conf文件夹      ---> settings.py
core文件夹      ---> src.py
				   admin_view.py
				   teacher_view.py
				   student_view.py       
db文件夹        ---> db_handler.py
				   models.py
				   Admin   ---> 管理员数据信息
				   Teacher ---> 教师数据信息
				   Student ---> 学生数据信息
interface文件夹 ---> admin_interface.py
				   teacher_interface.py
				   student_interface.py 
lib文件夹       ---> common.py
项目说明文件     ---> readme.txt
项目所导模块文件  ---> requirements.txt

数据保存剖析

类产生的对象在保存的时候	
	自动创建一个与类名一样的文件夹名 将数据保存到该文件夹内

# 如何通过对象获取类对应的字符串名称
obj = Admin('jason',123)
# 固定方法
print(obj.__class__)  # <class '__main__.Admin'>    类名
print(obj.__class__.__name__)  # Admin              字符串

标签:__,30,obj,name,选课,self,py,print,pickle
来源: https://www.cnblogs.com/kazz/p/16138298.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有