单例,顾名思义单个实例。
学习单例之前,首先来回顾下面向对象的内容:
python的面向对象由两个非常重要的两个“东西”组成:类、实例
面向对象场景一:
如:创建三个游戏人物,分别是:
盖伦,男,18,初始战斗力1000剑圣,男,20,初始战斗力1800凯特琳,女,19,初始战斗力2500 # 定义类 class Person: def __init__(self, name, sex, age, fight): self.name = name self.gender = sex self.age = age self.fight =fight def grassland(self): """注释:草丛战斗,消耗200战斗力""" self.fight = self.fight - 200 #创建实例 garen = Person('盖伦', '男', 18, 1000) # 创建盖伦角色 yi = Person('剑圣', '男', 20, 1800) # 创建剑圣角色 caitlyn = Person('凯特琳', '女', 19, 2500) # 创建凯特林角色面向对象场景二:
如:创建对数据库操作的公共类
增删改查 # #### 定义类 #### class DbHelper(object): def __init__(self): self.hostname = '1.1.1.1' self.port = 3306 self.password = 'pwd' self.username = 'root' def fetch(self): # 连接数据库 # 拼接sql语句 # 操作 pass def create(self): # 连接数据库 # 拼接sql语句 # 操作 pass def remove(self): # 连接数据库 # 拼接sql语句 # 操作 pass def modify(self): # 连接数据库 # 拼接sql语句 # 操作 pass # #### 操作类 #### db = DbHelper() db.create()对于上述实例,每个请求到来,都需要在内存里创建一个实例,再通过该实例执行指定的方法。
那么问题来了...如果并发量大的话,内存里就会存在非常多功能上一模一样的对象。存在这些对象肯定会消耗内存,对于这些功能相同的对象可以在内存中仅创建一个,需要时都去调用,也是极好的!!!
单例模式出马,单例模式用来保证内存中仅存在一个实例!!!
# ########### 单例类定义 ########### class Foo(object): __instance = None @staticmethod def singleton(): if Foo.__instance: return Foo.__instance else: Foo.__instance = Foo() return Foo.__instance # ########### 获取实例 ########### obj = Foo.singleton()对于Python单例模式,创建对象时不能再直接使用:obj = Foo(),而应该调用特殊的方法:obj = Foo.singleton() 。
转载于:https://www.cnblogs.com/zhangxunan/p/5633139.html