python 空对象模式_Python 单例模式(3种方式)

# 单例模式:

# 实现目的:实例化多次,得到的实例是同一个,就是同一个对象,同一个名称空间(更加节省空间)

####################################方式一:在类内部定义一个类方法#################################

import settings

class Mysql:

__instance=None #定义一个变量,来接收实例化对象,方便下面做判断

def __init__(self,ip,port):

self.ip=ip

self.port=port

#

@classmethod #做成类方法 #绑定给Mysql类去直接调用实例化

def from_conf(cls):

#目的是要调取mysql这个类通过从配置文件读取IP、端口参数,完成调用init方法,拿到一个实例化init方法的对象

# mysql(settings.IP,settings.PORT)

#如果是这样每次,实例化出的对象,都是不同的名称空间,但是数据是同一份

# return cls(settings.IP,settings.PORT) #cls(ip,port) 就是调用init方法

#演变最终版:思考可以统一定义一个初始变量__instance=None,将第一次实例的对象传给他,有每次外面再访问就直接

if cls.__instance is None:

cls.__instance=cls(settings.IP,settings.PORT)

return cls.__instance

#之前版本:

# p1=Mysql.from_conf()

# print(p1) #<__main__.mysql object at> #数据是同一份,但每次实例化,指向的都是不同的内存地址

# p2=Mysql.from_conf()

# print(p2) #<__main__.mysql object at>

#这样写就完美的实现了隔离:

#升级版本后,可以实现,访问存的东西一样的,可以指向同一个内存空间

obj=Mysql.from_conf()

print(obj.__dict__)

#也可以传入新的参数,另外新造一个名称空间

obj2=Mysql('3.3.3.3',8888)

print(obj2.__dict__)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值