Enforces usage of '__slots__' for python classes
Project description
Enforces usage of __slots__ for python classes and provides pickling capabilities.
Examples
When defining a Slotted class with no __slots__ declaration, it assumes it has empty slots, which is equivalent to declaring __slots__ = ().
>>> from slotted import Slotted
>>> class Foo(Slotted):
... pass # implicit declaration of __slots__ = ()
...
>>> foo = Foo()
>>> foo.bar = 1
Traceback (most recent call last):
AttributeError: 'Foo' object has no attribute 'bar'
Slotted classes can be mixed with regular classes as long as they and all of their bases implement __slots__.
>>> from slotted import Slotted
>>> class Bar:
... __slots__ = ("bar",)
>>> class Foo(Bar, Slotted):
... __slots__ = ("foo",)
...
>>> foo = Foo()
If any non-Slotted class anywhere in the chain does not implement __slots__, a TypeError exception is raised.
>>> from slotted import Slotted
>>> class Bar:
... pass
>>> class Foo(Bar, Slotted):
... __slots__ = ("foo",)
...
Traceback (most recent call last):
TypeError: <class '__main__.Bar'> does not define __slots__
Slotted behavior can also be achieved by using the SlottedMeta metaclass.
>>> from slotted import SlottedMeta
>>> class Foo(metaclass=SlottedMeta):
... pass # implicit declaration of __slots__ = ()
...
>>> foo = Foo()
>>> foo.bar = 1
Traceback (most recent call last):
AttributeError: 'Foo' object has no attribute 'bar'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
slotted-2.0.0.tar.gz
(3.8 kB
view hashes)
Built Distribution
Close
Hashes for slotted-2.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b22e786cccc9ed81c3666bd72e82127b3ef3342a630a76266afd3ca8849714a1 |
|
MD5 | d42c6d937c4c94ac34308e6174a3b8e9 |
|
BLAKE2b-256 | 31ada6365b5765febbede1279a3dfd80e37dcff2f4cdd98d99f4e187f7811e3f |