Python學習 :反射 & 單例模式

  • 2020 年 1 月 16 日
  • 筆記

 反射

  什麼是反射?

  - 反射主要是指程式可以訪問、檢測和修改它本身狀態或行為的一種能力(自省)

  面向對象中的反射

  - 通過字元串的形式來操作(獲取、檢查、增加、刪除)對象中的成員

  - python中的一切事物都是對象(都可以使用反射)

  四個可以實現自省的函數:

  - getattr()   獲取屬性

  - hasattr()  判斷對象中是或否擁有特定的值

  - setattr()   設置屬性

  - delattr(obj,'gender')  刪除屬性

class Info:         def __init__(self,name,age,gender):           self.name = name           self.age  = age           self.gender = gender       def show(self):           return '%s - %s' %(self.name,self.age)    obj = Info('alex','20','男')    b = 'name'  print(obj.__dict__[b])  print(obj.__dict__['name'])    #getattr()  inp = input('請輸入想要獲取的內容:')  v = getattr(obj,inp)  print(v)    func = getattr(obj,'show')  v = func()  print(v)    #hasattr()  print(hasattr(obj,'name'))    #setattr()  setattr(obj,'k1','v1')    #delattr(obj,'gender')  obj.gender  # 此時報錯,Info類中的gender對象已被刪除

  操作類對象:

class Info(object):      staticField = "Hello World!"        def __init__(self):          self.name = 'mike'        def func(self):          return 'func'        @staticmethod      def bar():          return 'bar'    print(getattr(Info, 'staticField'))  print(getattr(Info, 'func'))   # 返回函數的記憶體地址  print(getattr(Info, 'bar'))    # 返回函數的記憶體地址

 單例模式

  什麼是單例模式?

  - 單例模式(Singleton Pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某一個類只有一個實例存在。

  - 當你希望在整個系統中,某個類只能出現一個實例時,單例對象就能派上用場。

  - 單例,永遠使用同一份實例(對象)。單例模式能夠有效地節約記憶體資源。

  實現單例模式:

class Info:      __v = None        @classmethod      def get_instance(cls):          if cls.__v:              return cls.__v          else:              cls.__v = Info()              return cls.__v    obj1 = Info.get_instance()  print(obj1)  obj2 = Info.get_instance()  print(obj2)

Tags: