反射

什么是反射?

- 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)

面向对象中的反射

- 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员

- 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)

最新文章

  1. 线性判别分析LDA原理总结
  2. UVALive 6577 Binary Tree 二叉树的LRU串
  3. android 自定义控件 使用declare-styleable进行配置属性(源码角度)
  4. Python基础10 反过头来看看
  5. Unity3D 之暂停和继续的实现
  6. V9自定义分页函数
  7. LINQ Enumerable
  8. 手机上使用asmack开发xmpp客户端
  9. 从C# String类理解Unicode(UTF8/UTF16)
  10. APP-SQLAP-10771
  11. 2017/10/10 jar包错误
  12. 普通用户登陆系统显示 -bash-4.1$
  13. (转)如何在maven的pom.xml中添加本地jar包
  14. pyqt笔记2 布局管理
  15. Git的一些资源链接
  16. iOS开发笔记-图标和图片大小官方最新标准
  17. Mybatis-Dao层开发之Mapper接口
  18. Java -- 异常的捕获及处理 -- 目录
  19. Android学习之Handler消息
  20. Java MVC和三层架构

热门文章

  1. new era
  2. Python学习---函数的学习1209[all]
  3. vSan中见证组件witness详解
  4. MapReduce Design Patterns(chapter 1)(一)
  5. Linux命令--目录处理
  6. LINUX下OA搭建
  7. 9、Node.js Stream(流)
  8. Mac原生Terminal快速登录ssh
  9. webpack和gulp
  10. Java自带线程池和队列详解