zoukankan      html  css  js  c++  java
  • python 内建函数__new__的单例模式

    今天好奇__init__和__new__的区别是什么?

    我了解到:

      __init__:只是单纯的返回一个类对象的实例,是在__new__之后调用的

      __new__:创建一个类对象实例,

    class Singleton(object):
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls, '_instance'):
                orig = super(Singleton,cls)
                cls._instance = orig.__new__(cls, *args, **kwargs)
            return cls._instance
        
    class myClass(Singleton):
        a=1
        
    one = myClass()
    two = myClass()
    two.a=3

    运行结果如下:

    pydev debugger: starting (pid: 13388)
    3
    True

    可以看出使用__new__创建的对象是同一个对象,是单例。如否要验证__init__和__new__的调用顺序,可以定义一个__init__然后简答的输出一串字符串,看看那个函数的字符串先出输出就是先调用了那个

    作者:first_semon
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题,欢迎交流
  • 相关阅读:

    入门动态规划问题
    AC自动机
    KMP算法
    [OpenGL]用鼠标拖拽图形移动
    HDU-2222 Keywords Search
    Trie
    Manacher算法
    linux环境搭建
    Android Studio使用JNI和NDK进行开发
  • 原文地址:https://www.cnblogs.com/first-semon/p/9173261.html
Copyright © 2011-2022 走看看