zoukankan      html  css  js  c++  java
  • Python如何实现单例模式?其他23种设计模式python如何实现?

    #使用__metaclass__(元类)的高级python用法  
    class Singleton2(type):  
        def __init__(cls, name, bases, dict):  
            super(Singleton2, cls).__init__(name, bases, dict)  
            cls._instance = None  
        def __call__(cls, *args, **kw):  
            if cls._instance is None:  
                cls._instance = super(Singleton2, cls).__call__(*args, **kw)  
            return cls._instance  
     
    class MyClass3(object):  
        __metaclass__ = Singleton2  
     
    one = MyClass3()  
    two = MyClass3()  
     
    two.a = 3  
    print one.a  
    #3  
    print id(one)  
    #31495472  
    print id(two)  
    #31495472  
    print one == two  
    #True  
    print one is two  
    #True
    #使用装饰器(decorator),  
    #这是一种更pythonic,更elegant的方法,  
    #单例类本身根本不知道自己是单例的,因为他本身(自己的代码)并不是单例的  
    def singleton(cls, *args, **kw):  
        instances = {}  
        def _singleton():  
            if cls not in instances:  
                instances[cls] = cls(*args, **kw)  
            return instances[cls]  
        return _singleton  
     
    @singleton  
    class MyClass4(object):  
        a = 1  
        def __init__(self, x=0):  
            self.x = x  
     
    one = MyClass4()  
    two = MyClass4()  
     
    two.a = 3  
    print one.a  
    #3  
    print id(one)  
    #29660784  
    print id(two)  
    #29660784  
    print one == two  
    #True  
    print one is two  
    #True  
    one.x = 1  
    print one.x  
    #1  
    print two.x  
    #1

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/apollo1616/p/9776737.html
Copyright © 2011-2022 走看看