kost-bebix
Здравствуйте. Хочу сделать, чтоб если класс синглтон (singleton) можно было не писать каждый раз
А просто наследовать уже готовый класс Singleton:
class A(Singleton):
pass
Вопрос: возможно ли это?
Очень даже возможно, при чем без метаклассов:
>>> class Singleton(object):
… __single = None
… def __new__(cls, *args, **kwargs):
… if cls.__single:
… raise Exception
… else:
… cls.__single = cls
… return cls
…
>>> class A(Singleton):
… pass
…
>>> class B(Singleton):
… pass
…
>>> a = A()
>>> aa = A()
Traceback (most recent call last):
File “<interactive input>”, line 1, in ?
File “<interactive input>”, line 5, in __new__
Exception
>>> b = B()
>>> bb = B()
Traceback (most recent call last):
File “<interactive input>”, line 1, in ?
File “<interactive input>”, line 5, in __new__
Exception
Тот же функционал можно было вынести и в инит, но в этом случае пришлось бы в каждом наследнике перевызывать конструктор родительского класса.