浅谈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 相关文章推荐
python 自动提交和抓取网页
Jul 13 Python
Python读写Excel文件的实例
Nov 01 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
python logging日志模块的详解
Oct 29 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
python ubplot使用方法解析
Jan 10 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
Python中else的三种使用场景
Jun 16 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
Discuz! Passport 通行证整合
2008/03/27 PHP
php画图实例
2014/11/05 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python转码问题的解决方法
2008/10/07 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python设置环境变量的原因和方法
2019/06/24 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
启动一个线程是用run()还是start()
2016/12/25 面试题
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
检察官就职演讲稿
2014/01/13 职场文书
单位政审意见范文
2015/06/04 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL