有这么一种场景,我们把数据封装到类体或类的某个方法里,然而我们new出这个类只是为了拿到这部分数据,那么当多次这样调用的时候,每次都来拿数据并放到内存中大大浪费了内存。

那我们就可以想,我们拿到一次数据以后,把它放到内存里,下次要用同样的时候做个判断,如果内存里有,那么就不用再取了。

这个时候就要设计一种“单实例模式”。

方法1:

class Foo(object):
__instance = None def __new__(cls, *args, **kwargs):
"""
单例模式
:param cls:
:param args:
:param kwargs:
:return:
"""
# 注意此处的判断,当cls.__instance为None时,才去真正的new,否则直接返回。
if not cls.__instance:
obj = object.__new__(cls, *args, **kwargs)
cls.__instance = obj
return cls.__instance object = Foo() # 先调用__new__,再调用__init__,__init__就类似于构造器。

在此也要补充一下,python创造类的实例,其实和java一样,都叫new出来的,只不过Python是将这个new方法写成内置的了(__new__),那我们也可以知道,当写object = Foo()时,先调的__new__,再调的__init__。

方法二:

class Foo(object):
instance = None def __init__(self):
self.name = 'haha'
# 其实和方法一的一个道理,建议用方法一。
@classmethod
def get_instance(cls):
if Foo.instance:
return Foo.instance
else:
Foo.instance = Foo()
return Foo.instance def process(self):
return ''

最新文章

  1. java DMO及增删改查代码的自动生成
  2. selenium webdriver自动化对日期控件的处理
  3. Vigenère 密码(luogu 1079)
  4. Date and Time in PeopleCode
  5. r个有标志的球放进n个不同的盒子里,要求无一空盒,问有多少种不同的分配方案?
  6. mysql配置优化
  7. js的原型继承小结
  8. CodeForces 486C Palindrome Transformation 贪心+抽象问题本质
  9. Tyvj P1813 [JSOI2008]海战训练
  10. Linux文件系统的层级结构
  11. 记一次python的一些参数
  12. 【kmp】 剪花布条 HDU - 2087
  13. ArcGIS对SLD样式的支持
  14. PDO和MySQLi区别与选择?
  15. 范式及其在mysql数据库设计中的应用
  16. Java 获取最近时间
  17. Codeforces 946D - Timetable (预处理+分组背包)
  18. drupal 7 安装失败后的补救办法
  19. nodejs读取excel内容批量替换并生成新的html和新excel对照文件
  20. Codeforces #345div1 C Table Compression (650C) 并查集

热门文章

  1. SDL2源码分析2:窗体(SDL_Window)
  2. 经典面试题目——250M内存处理10G大小的log文件
  3. Spring基础知识之依赖注入
  4. Java基础(四)-异常处理机制及其设计
  5. 记录在vue中使用jsx时踩过的坑
  6. ArcGIS API for JavaScript 4.3 与ArcGIS Server联动使用【地图服务】
  7. 扩展Microsoft Graph数据结构(开放扩展)
  8. java复写equals例子
  9. css样式清零及常用类
  10. 阿里云Centos7 apache配置