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)