Hi everyone, I want to use a metaclass to override how class instantiation works. I've done something analogous to using the Singleton metaclass from the Python3 Cookbook example.
However, I want to provide a classmethod that allows for "normal" class instantiation that prevents this metaclass from being used. To do that, I think I just make a @classmethod constructor function. However, I can imagine a few different ways of writing this: @classmethod def normal_constructor(cls, *args, **kwargs): return type.__call__(*args, **kwargs) @classmethod def normal_constructor(cls, *args, **kwargs): return super(???).__call__(*args, **kwargs) # I'm not sure what should go in the super here (I'm using python3) @classmethod def normal_constructor(cls, *args, **kwargs): self = cls.__new__(cls) self.__init__(*args, **kwargs) return self Is one of these correct? Or do they all do the same thing? I was looking for documentation for what exactly `type.__call__` does so that I can emulate it, but I wasn't able to find any docs explicitly detailing what that method does. If someone knows where this info is that would be great too. -- https://mail.python.org/mailman/listinfo/python-list