浅谈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中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Python字典简介以及用法详解
Nov 15 Python
Python函数式编程
Jul 20 Python
Python实现进程同步和通信的方法
Jan 02 Python
python web基础之加载静态文件实例
Mar 20 Python
Python实现中一次读取多个值的方法
Apr 22 Python
python 产生token及token验证的方法
Dec 26 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
TensorFlow固化模型的实现操作
May 26 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
scrapy头部修改的方法详解
Dec 06 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实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python实现子类调用父类的方法
2014/11/10 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
python生成式的send()方法(详解)
2017/05/08 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
python抓取文件夹的所有文件
2018/02/27 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
python实现控制台输出彩色字体
2020/04/05 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
淘宝活动策划方案
2014/02/06 职场文书
我的画教学反思
2014/04/28 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
JavaScript组合继承详解
2021/11/07 Javascript