1

この最初の pls を読んでください: __init__ は、このシングルトンの実装で複数回呼び出されますか? (パイソン)

class Singleton(object):

    _instance = None

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


class Cache(Singleton):

    def __init__(self, size=100):
        print 'Cache.__init__ called with size', size



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

結果:

Singleton.__new__ called with class <class '__main__.Cache'>
Singleton.__new__ creating instance of class <class '__main__.Cache'>
Cache.__init__ called with size 0
Singleton.__new__ called with class <class '__main__.Cache'>
Singleton.__new__ called with class <class '__main__.Cache'>
Singleton.__new__ called with class <class '__main__.Cache'>
Singleton.__new__ called with class <class '__main__.Cache'>

現在は機能しているようですが、問題は、Singleton で継承クラスinitを明示的に呼び出すことがPythonic であるかどうかです。これで問題が発生する可能性はありますか?

4

1 に答える 1

0

うまくいきません。から実際には何も__new__返さないため、デフォルト値の を返しますNonecls._instanceは適切に設定されていますが、cls._instance呼び出しても取得できませんCache

于 2013-08-22T16:57:45.950 に答える