浅谈Python反射 & 单例模式


Posted in Python onMarch 21, 2019

反射

什么是反射?

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

  面向对象中的反射

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

  - 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)

以上所述是小编给大家介绍的Python反射 & 单例模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
基于Python实现的扫雷游戏实例代码
Aug 01 Python
跟老齐学Python之开始真正编程
Sep 12 Python
python从入门到精通(DAY 3)
Dec 20 Python
Python开发的实用计算器完整实例
May 10 Python
python进程和线程用法知识点总结
May 28 Python
利用python计算时间差(返回天数)
Sep 07 Python
python enumerate内置函数用法总结
Jan 07 Python
python中adb有什么功能
Jun 07 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
详解Python中is和==的区别
Mar 21 #Python
浅谈Python的条件判断语句if/else语句
Mar 21 #Python
python使用thrift教程的方法示例
Mar 21 #Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 #Python
详解python使用turtle库来画一朵花
Mar 21 #Python
python中import与from方法总结(推荐)
Mar 21 #Python
python批量创建指定名称的文件夹
Mar 21 #Python
You might like
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
JS控制表格隔行变色
2006/06/26 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
详解jQuery事件
2017/01/13 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
python调用Delphi写的Dll代码示例
2017/12/05 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
利用python计算时间差(返回天数)
2019/09/07 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
Python实现GIF图倒放
2020/07/16 Python
Python3获取cookie常用三种方案
2020/10/05 Python
如何实现jdbc性能优化
2012/07/30 面试题
学校万圣节活动方案
2014/02/13 职场文书
红色旅游心得体会
2014/09/03 职场文书
优秀员工事迹材料
2014/12/20 职场文书
小学母亲节活动总结
2015/02/10 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
JVM钩子函数的使用场景详解
2021/08/23 Java/Android