浅谈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 相关文章推荐
在Windows8上的搭建Python和Django环境
Jul 03 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
python+pygame简单画板实现代码实例
Dec 13 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
详解Python基础random模块随机数的生成
Mar 23 Python
用python打印菱形的实操方法和代码
Jun 25 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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关联链接常用代码
2012/11/05 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python匹配中文的正则表达式
2016/05/11 Python
Python优先队列实现方法示例
2017/09/21 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
python实现感知机模型的示例
2020/09/30 Python
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
如何获得EntityManager
2014/02/09 面试题
中职应届生会计求职信
2013/10/23 职场文书
入党推优材料
2014/06/02 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
毕业生见习报告总结
2014/11/08 职场文书
厉行节约工作总结
2015/08/12 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书