singleton(cls, [attr_name,] [disable_name_mangling,] [not_just_this_class,]) is cls
Project description
asingleton
>>> from asingleton import singleton
>>> print(singleton.__doc__)
singleton(cls,
attr_name='instance',
disable_name_mangling=False,
not_just_this_class=False) -> cls
singleton(attr_name='instance',
disable_name_mangling=False,
not_just_this_class=False)(cls) -> cls
>>> @singleton
... class Service:
... pass
...
>>> Service() is Service.instance
True
>>> Service() # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
Traceback (most recent call last):
...
AssertionError: There is already an instance of type <class '...Service'>;
it can be accessed through the class attribute 'Service.instance'.
>>> @singleton('__instance')
... class Service:
... @classmethod
... def get_instance(cls):
... return cls.__instance
...
>>> Service() is Service.get_instance()
True
>>> Service.__instance
Traceback (most recent call last):
...
AttributeError: type object 'Service' has no attribute '__instance'
>>> @singleton(not_just_this_class=True)
... class Service:
... pass
...
>>> class Apache(Service):
... pass
...
>>> Apache() is Apache.instance
True
>>> Apache() # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
Traceback (most recent call last):
...
AssertionError: There is already an instance of type <class '...Apache'>;
it can be accessed through the class attribute 'Apache.instance'.
>>> class Service:
... def __new__(cls, *args, **kwargs):
... """My custom __new__"""
... return super().__new__(cls, *args, **kwargs)
... original_new = __new__
...
>>> singleton(Service) is Service
True
>>> Service.__new__ is Service.original_new
False
>>> Service.__new__.__wrapped__ is Service.original_new
True
>>> Service.__new__.__doc__
'My custom __new__'
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
asingleton-0.3.0.tar.gz
(2.6 kB
view details)
Built Distribution
File details
Details for the file asingleton-0.3.0.tar.gz
.
File metadata
- Download URL: asingleton-0.3.0.tar.gz
- Upload date:
- Size: 2.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31f6ff67973dea8c86f08dadb4fb4ee1ff2554150f89df986eb328345b98b66c |
|
MD5 | 477900c6328d6acc825645b23bf607cd |
|
BLAKE2b-256 | 738cf5ae0293cee54ac200d994fc610d0ee0759370ad0af133c32075b70649ea |
File details
Details for the file asingleton-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: asingleton-0.3.0-py3-none-any.whl
- Upload date:
- Size: 4.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4088f39da621b380e8473c5993e8fc5937ae5ce1cac38ba4914e712b8f583c3e |
|
MD5 | b2fc4abafc0ab9b08e437370ba732f6f |
|
BLAKE2b-256 | cb3b70c76c850ceda91558cc28bf524c1345ae36526c700c2187e53de7ff7fc3 |