不__init__获取与此实施辛格尔顿多次调用? (蟒蛇)(does __init__ get

2019-10-18 13:09发布

来源: Python和Singleton模式

根据上面的答案初始化最upvoted评论被多次调用,如果收益类实例。

所以,我检查这个:

class Singleton(object):

    _instance = None

    def __new__(cls, *args, **kwargs):
        print 'Singleton.__new__ called with class', cls
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance


class Cache(Singleton):

    def __init__(self, size=100):
        print 'I am called with size', size


class S(Singleton):
    def __init__(self, param):
        print 'I am S with param', param


c = Cache(20)
s = S(10)

结果:

Singleton.__new__ called with class <class '__main__.Cache'>
I am called with size 20
Singleton.__new__ called with class <class '__main__.S'>
I am S with param 10

显然,init不会叫一个类继承辛格尔顿不止一次。 已不便在Python改变处理这个在此期间(考虑的问题是在2008年提出),还是我在这里失去了不便?

Answer 1:

请更换您的最后两行

for x in range(5):
    c = Cache(x)
    s = S(x)

并发布结果。



Answer 2:

从打印结果很明显, __init__是在建设每一个新的名为CacheS对象。

当你创建一个类的实例(例如, Cache(10)的Python首先创建使用它的一个新实例__new__然后使用初始化__init__

换句话说显然你看错东西。



文章来源: does __init__ get called multiple times with this implementation of Singleton? (Python)