On 08/09/2017 03:39 PM, Ian Kelly wrote:
On Wed, Aug 9, 2017 at 2:20 PM, Ethan Furman wrote:
On 08/09/2017 12:59 PM, Ian Pilcher wrote:
I do want to prevent frozenset.__init__ from being called *again* when
an existing instance is returned, so I've decided to take this
approach:
def __new__(cls, *args, **kwargs):
self = super(UniqueSet, cls).__new__(cls, *args, **kwargs)
self._initialized = False
return UniqueSet._registry.setdefault(self, self)
def __init__(self, *args, **kwargs):
if not self._initialized:
super(UniqueSet, self).__init__(self, *args, **kwargs)
self._initialized = True
Whom do you think is going to call __init__ a second time?
The __call__ method of the metaclass. Here's an example using a singleton class:
--> Singleton()
__init__ called 1 times
<__main__.Singleton object at 0x76b54a717518>
--> Singleton()
__init__ called 2 times
<__main__.Singleton object at 0x76b54a717518>
--> Singleton() is Singleton()
__init__ called 3 times
__init__ called 4 times
True
Ah, cool! I hadn't known about that particular side effect of singletons.
--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list