浅谈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多线程用法实例详解
Jan 15 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python装饰器用法实例总结
May 26 Python
python自动发送邮件脚本
Jun 20 Python
python中的decorator的作用详解
Jul 26 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
Python必备技巧之字符数据操作详解
Mar 23 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获取二维数组中某一列的值集合
2015/12/25 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
使用python编写udp协议的ping程序方法
2018/04/22 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
Python使用python-docx读写word文档
2019/08/26 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
python简单实现9宫格图片实例
2020/09/03 Python
Python pymsql模块的使用
2020/09/07 Python
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
2014年实验室工作总结
2014/12/03 职场文书
网络管理员岗位职责
2015/02/12 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
务工证明怎么写
2015/06/18 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android