python-单例模式

Posted 忆梦,惊梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-单例模式相关的知识,希望对你有一定的参考价值。

1.单例是什么

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

2. 创建单例-保证只有1个对象

3. 创建单例时,只执行1次__init__方法

# 单例模式 在程序中这个类创建出来的对象 只有一个(也就是占用一份内存地址)
# 单例模式 也只会走一次__init__方法(保证这个单例对象的属性也是唯一的)(name=小明 age=20)
# 合理的使用内存(避免内存浪费)
class Person(object):
    # 定义一个类属性  保存这个类创建的对象
    __instance = None
    # 定义一个类属性 判断是否是第一次走init方法
    __is_first = True
    # 创建对象
    # 重写new方法 是为了完成单例模式中的对象地址唯一
    def __new__(cls, *args, **kwargs):
        # 判断是否通过这个类创建过对象
        if not cls.__instance:   # 如果没有值需要创建
            cls.__instance = object.__new__(cls)   # 创建对象保存起来
        return cls.__instance  # 如果有值直接返回

    def __init__(self, name, age):
        # 判断是否是第一次
        if Person.__is_first:
            # 赋值一次
            self.name = name
            self.age = age
            # 设置类属性is_first 为False
            Person.__is_first = False
# 创建对象
xiaoming = Person("小明", 20)
xiaohong = Person("小红", 21)
xiaoyang = Person("小阳", 22)
print(xiaoming.name, xiaohong.name, xiaoyang.name)  # 小明 小明 小明

# num = None
# # 如果不为none 也就是真
# if not num:
#     print("测试")

# 单例的好处???
class HMTest(object):
    def my_func(self, a, b):
        return a + b
# 在程序中 需要计算多次求和操作 比如1000次 可以省掉999分内存
# 每次使用
# 实例化一个对象
# hm = HMTest()
# hm.my_func(10, 20)
# 为了节约内存

以上是关于python-单例模式的主要内容,如果未能解决你的问题,请参考以下文章

Python 单例设计模式

Python单例

一日一技:Python 下面最简单的单例模式写法

Python面向对象之单例模式

常用代码片段

常用代码片段