1. 程式人生 > 其它 >今日學習內容總結2.9

今日學習內容總結2.9

今日學習內容總結

      在昨日的學習中,我們基本對面向物件的學習已經收尾。而今天就開始了對面向物件的使用。以及其對應模組與模式的學習。

昨日作業重點

  # 編寫元類規定物件的所有資料值轉大寫
  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

      後續的學習內容就是選課系統專案的需求分析等的操作,作為對面向程式設計的所有知識的學習與整合。