浅谈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上基于Markov链生成伪随机文本的教程
Apr 17 Python
在windows系统中实现python3安装lxml
Mar 23 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python numpy 点数组去重的实例
Apr 18 Python
python2.7实现邮件发送功能
Dec 12 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
使用python爬取抖音视频列表信息
Jul 15 Python
django将数组传递给前台模板的方法
Aug 06 Python
python通过matplotlib生成复合饼图
Feb 06 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
python ssh 执行shell命令的示例
Sep 29 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入门学习的几个不错的实例代码
2008/07/13 PHP
PHP安全上传图片的方法
2015/03/21 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
原生js和css实现图片轮播效果
2017/02/07 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python数据结构之图的应用示例
2018/05/11 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Python中包的用法及安装
2020/02/11 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
服务理念标语
2014/06/18 职场文书
学校献爱心活动总结
2014/07/08 职场文书
2016年父亲节寄语
2015/12/04 职场文书
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技