python学习-(__new__方法和单例模式)

class Dog(object):
    __instance = None
    __init_flag = False

    def __new__(cls, name):
        if cls.__instance == None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            #返回上一次创建的对象的引用
            return cls.__instance

    def __init__(self,name):
        if Dog.__init_flag == False:
            self.name = name
            Dog.__init_flag = True

a = Dog("旺财")
print(id(a))
print(a.name)

b = Dog("哮天犬")
print(id(b))
print(b.name)

打印结果:

2193174953824

旺财

2193174953824

旺财

最后附上图便于理解 __new__方法的含义

时间: 2024-08-08 14:37:23

python学习-(__new__方法和单例模式)的相关文章

Python 的 __new__()方法与实例化

__new__() 是新式类中才有的方法,它执行在构造方法创建实例之前.可以这么理解,在 Python 中类中的构造方法 __init__() 负责将类实例化,而在 __init__() 启动之前,__new__() 决定是否要使用该 __init__() 方法(因为__new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例). 如果将类比喻成工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参数则是生产所需的原料,__init__

【python】Python 之 __new__() 方法与实例化

本文转自:http://www.cnblogs.com/ifantastic/p/3175735.html __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构造方法 __init__() 负责将类的实例化,而在 __init__() 启动之前,__new__() 决定是否要使用该 __init__() 方法,因为__new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例. 如果将类比喻为工厂,那 么

Python 之 __new__() 方法与实例化(转)

_new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构造方法 __init__() 负责将类的实例化,而在 __init__() 启动之前,__new__() 决定是否要使用该 __init__() 方法,因为__new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例. 如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参数则是生产所需原料,__in

python的__new__方法

https://www.cnblogs.com/kex1n/p/5991249.html https://blog.csdn.net/wwx890208/article/details/80534453 object将__new__()方法定义为静态方法,并且至少需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供. 我们来看下下面类中对__new__()方法的实现: class Demo(object): def __init__(self): pri

python三种方法创建单例模式

# 方法一,装饰器 from functools import wraps def single_instance(cls): """装饰器实现单例模式,装饰器相当于把类给包了起来,强制返回一个对象""" _instance = None @wraps(cls) def wrapper(*args, **kwargs): nonlocal _instance if _instance is None: _instance = cls(*args,

python学习笔记☞方法

方法: 类的功能有一个更通俗的名字叫方法.在python中,方法定义在类定义中,但只能被实例调用.也就是说,调用一个方法的最终途径必须是这样的:(1)定义类(和方法);(2)创建一个实例:(3)最后一步,用这个实例调用方法. 例如" class mydatawithmethod(object): #定义类 def printFoo: #定义方法 print 'you invoked printFoo()!'

Python学习_12_方法和类定制

方法 在上一篇随笔中,简单提到了类的某些方法:__init__()等的调用,并简要说明方法和函数的区别. 方法是在类内部定义的函数,方法也是对象,所以方法是类的属性,这就是为什么说实例的方法存在于类定义中.而在ruby中,方法肯定是存在于类中的,实例的单件方法就存在于单件类中,python中并没有单件类,并且方法本质也是属性,所以实例的方法也可以存在于自身,而在调用方法时,同样遵循命名空间的查找顺序.但是方法和一般是属性任然存在区别: from types import MethodTypecl

Python中__new__()方法的使用和实例化

new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决定是否要使用该init()方法,因为new()可以调用其他类的构造方法或者直接返回别的对象来作为本类 的实例. 如果将类比喻为工厂,那么init()方法则是该工厂的生产工人,init()方法接受的初始化参 数则是生产所需原料,init()方法会按照方法中的语句负责将原料加工成实例以供工厂出货.而 n

python的__new__方法和__del__方法

new()方法会在init之前调用 >>> class CapStr(str): def __new__(cls,string): string = string.upper() return str.__new__(cls,string) pass >>> a = CapStr('i love you') >>> a 'I LOVE YOU' >>> del(self) 垃圾回收机制调用del方法: class C: def __i