浅谈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聊天程序实例代码分享
Nov 18 Python
Python解析Excle文件中的数据方法
Oct 23 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
在python image 中实现安装中文字体
May 16 Python
python实现文件分片上传的接口自动化
Nov 19 Python
Django 实现jwt认证的示例
Apr 30 Python
Python图片检索之以图搜图
May 31 Python
python画条形图的具体代码
Apr 20 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+xslt在windows平台上
2006/10/09 PHP
PHPCMS的使用小结
2010/09/20 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
Firefox div高度自适应
2009/04/28 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python多线程分块读取文件
2019/08/29 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
挂职自我鉴定
2014/02/26 职场文书
党在我心中演讲稿
2014/09/02 职场文书