zoukankan      html  css  js  c++  java
  • 25、面向对象(单例)


    25.1、介绍:

    1、单例即单个实例,指的是同一个类实例化多次的结果指向同一个对象,用于节省内存空间;

    2、如果我们从配置文件中读取配置来进行实例化,在配置相同的情况下,就没必要重复产生对象浪费内存了;


    25.2、示例:

    1、定义一个 settings.py 文件内容如下:

    HOST='1.1.1.1'

    PORT=3306


    2、定义一个类方法实现单例模式:

    import settings


    class Mysql:

    __instance = None

    # 定义一个类的实例化数据属性


    def __init__(self, host, port):

    self.host = host

    self.port = port


    @classmethod

    # 定义一个类方法

    def singleton(cls):

    if not cls.__instance:

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

    # 如果实例不存在就创建实例

    return cls.__instance

    # 如果实例存在就返回存在的实例



    obj1 = Mysql('1.1.1.2', 3306)

    obj2 = Mysql('1.1.1.2', 3306)

    print(obj1 is obj2)

    # obj1和obj2不是同一个对象

    # False


    obj3 = Mysql.singleton()

    obj4 = Mysql.singleton()

    print(obj3.host, obj3.port, obj4.host, obj4.port)

    # 1.1.1.1 3306 1.1.1.1 3306

    print(obj3 is obj4)

    # obj3和obj4是同一个对象

    # True


    3、定义一个装饰器实现单例模式:

    import settings


    #3

    def singleton(cls): # cls = Mysql

    #4

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

    #5

    def wrapper(*args, **kwargs):

    if args or kwargs:

    obj = cls(*args, **kwargs)

    return obj

    return __instance

    #6

    return wrapper


    #2

    @singleton # Mysql = singleton(Mysql) = wrapper

    class Mysql:

    def __init__(self, host, port):

    self.host = host

    self.port = port


    #1

    obj1 = Mysql()

    obj2 = Mysql()

    obj3 = Mysql()

    print(obj1 is obj2 is obj3)

    # True


    obj4 = Mysql('1.1.1.3', 3308)

    obj5 = Mysql('1.1.1.3', 3308)

    print(obj3 is obj4)

    # False








  • 相关阅读:
    PHP使用Memcache来存储session 其他【转载】
    Linux 学习记录 20170218
    php 数组去重
    关于php的array_diff和array_diff_assoc的使用总结
    使用谷歌浏览器调试WEB前端的一些必备调试技巧
    MySql 赋值操作符"="与":="
    移动设备检测类Mobile_Detect.php
    PHP Filter 函数 日常可用
    以符合人类阅读的方式打印php数组【转载】
    JavaWeb:HttpSession(一)
  • 原文地址:https://www.cnblogs.com/LiuChang-blog/p/12320496.html
Copyright © 2011-2022 走看看