Alexey Muranov <alexey.mura...@gmail.com> added the comment:

I see that I am not the only one who got bitten by this unexpected behaviour 
(though the others might have not realised it).  There is a question ["Creating 
a singleton in Python"][1] on StackOverflow which was posted in 2011 and by now 
has the total of 737 upvotes.  Here is a code snippet from the question:

    class Singleton(object):
        _instance = None
        def __new__(class_, *args, **kwargs):
            if not isinstance(class_._instance, class_):
                class_._instance = object.__new__(class_, *args, **kwargs)
            return class_._instance

    class MyClass(Singleton, BaseClass):
        pass

[1]: https://stackoverflow.com/q/6760685

Currently this does not work as expected, try:

    class Failed(Singleton):
        def __init__(self, _):
            pass

    Failed(42)  # TypeError: object.__new__() takes exactly one argument ...

There is a similar code snippet in the accepted [answer][2] with 507 upvotes:

    class Singleton(object):
        _instances = {}
        def __new__(class_, *args, **kwargs):
            if class_ not in class_._instances:
                class_._instances[class_] = super(Singleton, class_).__new__(
                    class_, *args, **kwargs
                )
            return class_._instances[class_]

    class MyClass(Singleton):
        pass

[2]: https://stackoverflow.com/a/6798042

This does not work either, for the same reason.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36827>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to