python конструктор в этом синглтоне вызывается каждый раз, хотя я вижу его только один раз в __init (self) __? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть этот синглет, я использую:

class MyThreadSafeSingleton(type):   
    def __init__(cls, name, bases, dictionary):
        super(Singleton, cls).__init__(name, bases, dictionary)
        cls._instance = None
        cls._rlock = threading.RLock()
        print("MyThreadSafeSingleton __init__")

    def __call__(cls, *args, **kws):
        with cls._rlock:
            if cls._instance is None:
                cls._instance = super(MyThreadSafeSingleton, cls).__call__(*args, **kws)
        print("MyThreadSafeSingleton __call__")
        return cls._instance

, и у меня есть простой класс, который использует его:

from utiils.singletone import MyThreadSafeSingleton
class Foo(object, metaclass=MyThreadSafeSingleton):
    def __init__(self):
        self.MyMemeber = 1
        print("Foo __init__")

и в основном:

a = Foo().MyMemeber
b = Foo().MyMemeber
c = Foo().MyMemeber
d = Foo().MyMemeber

и печать:

MyThreadSafeSingleton  __init__
Foo __init__
MyThreadSafeSingleton  __call__
MyThreadSafeSingleton  __call__
MyThreadSafeSingleton  __call__
MyThreadSafeSingleton  __call__

когда я запускаю его в IDE и устанавливаю точку останова в

 self.MyMemeber = 1

, я вижу, что ввод только один раз, что заставляет меня думать, что конструктор вызвал только один раз.
но какой конструктор он вызывает, когда я делаю Foo (). MyMemeber? Я имею в виду "()" часть на Foo
что это тригер?
Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...