zoukankan      html  css  js  c++  java
  • 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)
    # 为了节约内存

  • 相关阅读:
    POJ 2342.Anniversary party-树形dp
    Codeforces Round #363 (Div. 2) A、B、C
    Codeforces Beta Round #17 D.Notepad 指数循环节
    hdu 5920 Wool 思路
    hdu 5719 Arrange 贪心
    hdu 5718 Oracle 高精度
    hiho #1332 : 简单计算器 栈+递归
    UESTC 1074 秋实大哥搞算数 栈模拟
    cdoj 1329 卿学姐与魔法 优先队列
    cdoj 1324 卿学姐与公主 线段树裸题
  • 原文地址:https://www.cnblogs.com/peiya/p/13290004.html
Copyright © 2011-2022 走看看