python_单例模式

所有实例中封装的数据相同时,下面有两个例子,通过第一个例子运行我们发现,我们这个创建的类是为了进行,多实例化也就是每个对象赋予不同属性值,这种就不符合单例模式,再来看一下第二个例子,明显属性一样实际上只需要创建一次就可以了,多次创建只会占用内存地址,这种就适合做单例模式


例一:

class  Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age =age

    def f1(self):
        pass

    def f2(self):
        pass

xiaoming = Person("w",12)
print(xiaoming)
xiaohong = Person('s',13)
print(xiaohong)
<__main__.Person object at 0x000000946465AAC8>
<__main__.Person object at 0x000000946465A5C0>

例二:

class Person(object):
    def __init__(self):
        self.name = '123'
        self.age = '456'

    def f1(self):
        pass

    def f2(self):
        pass


xiaoming = Person()
print(xiaoming)
xiaoming = Person()
print(xiaoming)
<__main__.Person object at 0x00000062C57EA390>
<__main__.Person object at 0x00000062C5963240>
如何优化列二做到单例模式:

class SqlPool:
    __attr = None
    @staticmethod
    def connection():
        if SqlPool.__attr:
            return SqlPool.__attr
        else :
            #实例化
            SqlPool.__attr =SqlPool()
            return  SqlPool.__attr

    def __init__(self):
        self.ip = '1.1.1'

    def connections(self):
        pass

i= 0
while i<5:
    pool = SqlPool.connection()
    i = 1+i
    print(i)
    print(pool)

设置一个类属性用来接受实例化init,让每一个对象最后返回同一个init实例化

总结:

1.单列 只有一个实例

2.静态方法+静态字段

3.所有的实例中封装的内容相同时,用单例模式



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值