浅谈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的Django框架中的中间件
Jul 24 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
Python中垃圾回收和del语句详解
Nov 15 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
pytorch标签转onehot形式实例
Jan 02 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Python 调用有道翻译接口实现翻译
Mar 02 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
js里的prototype使用示例
2010/11/19 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
javascript测试题练习代码
2012/10/10 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
JavaScript函数详解
2015/02/27 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
Vue异步组件使用详解
2017/04/08 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
python 日志增量抓取实现方法
2018/04/28 Python
用Python解决x的n次方问题
2019/02/08 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python中Selenium库使用教程详解
2020/07/23 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
电子信息工程专业推荐信
2014/02/14 职场文书
护理学专业求职信
2014/06/29 职场文书
学历证明样本
2015/06/16 职场文书
信息技术国培研修日志
2015/11/13 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS