当前位置:脚本大全 > > 正文

python单例编程(浅谈Python反射 & 单例模式)

时间:2021-10-28 10:23:24类别:脚本大全

python单例编程

浅谈Python反射 & 单例模式

反射

什么是反射?

  - 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)

  面向对象中的反射

  - 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员

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

  四个可以实现自省的函数:

  - getattr()   获取属性

  - hasattr()  判断对象中是或否拥有特定的值

  - setattr()   设置属性

  - delattr(obj,'gender')  删除属性

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 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对象已被删除
  • 操作类对象:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 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)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。

      - 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

      - 单例,永远使用同一份实例(对象)。单例模式能够有效地节约内存资源。

      实现单例模式:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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)
  • 以上所述是小编给大家介绍的Python反射 & 单例模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!

    原文链接:https://www.cnblogs.com/ArticleYeung/p/10562744.html

    上一篇下一篇

    猜您喜欢

    热门推荐