设计模式、pickle模块

今日学习内容总结

      在昨日的学习中,我们基本对面向对象的学习已经收尾。而今天就开始了对面向对象的使用。以及其对应模块与模式的学习。

昨日作业重点

  # 编写元类规定对象的所有数据值转大写
  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('jason', 'male')
  print(obj.name)  # JASON
  print(obj.gender)  # MALE
  # 将新添加的数据也转为大写
  obj.hobby = 'jdb'
  print(obj.hobby)  # JDB

设计模式

      设计模式,是指软件设计问题的推荐方案。设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。需谨记一点:设计模式是高层次的方案,并不关注具体的实现细节,比如算法和数据结构。对于正在尝试解决的问题,何种算法和数据结构最优,则是由软件工程自己把握。

      在it行业中设计模式共有23种。可以分为三大类:

  1. 创建型
  2. 结构型
  3. 行为型

      创建型模式,又有这几种模式:

  1. 单例模式
  2. 工厂模式
  3. 建造者模式
  4. 原型模式

      而今天我们主要学习设计模式中的单例模式。

      单例模式:是一个常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在,当希望在某个系统中只出现一个实例时,单例对象就能派上用场。实例:

  class Singleton():
      _instance = None
      def __new__(cls, *args, **kwargs):
          if not  cls._instance:
              cls._instance = super().__new__(cls)
          return cls._instance

  s1 = Singleton()
  s2 = Singleton()
  print(id(s1),id(s2))  # 1902684779576 1902684779576

pickle模块

      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('jason')
  print(obj.school)  # school
  obj.choose_course()  # jason正在选课

  # pickle还可以进行读写文件的操作
  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 0x000001570905A320>
  print(data.name)  # jason
  print(data.school)  # school

      后续的学习内容就是选课系统项目的需求分析等的操作,作为对面向编程的所有知识的学习与整合。

posted @ 2022-04-12 21:50  くうはくの白  阅读(34)  评论(0)    收藏  举报