Metadata-Version: 2.1
Name: stupid
Version: 1.1.0
Summary: Support for multiple inheritance and __slots__
Home-page: https://github.com/masell/stupid
Author: masell
License: BSD
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
Requires-Dist: dataclasses

# stupid

A stupid workaround when using multiple inheritance and `__slots__`

# installation

`pip install stupid`

# example

```
from hashlib import sha512
from stupid import StupidData

class User(StupidData):
    name: str

class AccessData(StupidData):
    access_code: sha512

class ApiPayload(User, AccessData):
    pass

payload = ApiPayload("root", sha512()) 
payload = ApiPayload(name="root", access_code=sha512())
```

`__slots__` are autogenerated and works with multiple inheritance as shown above.
As `__slots__` are present assigning new attributes is not allowed.

```
>>> payload = ApiPayload(name="root", access_code=sha512())
>>> payload.extra = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'ApiPayload' object has no attribute 'extra'
```

It's also a dataclass.

```
>>> from dataclasses import is_dataclass
>>> is_dataclass(ApiPayload)
True
```

isinstance check also works.
```
>>> isinstance(payload, User)
True
>>> isinstance(payload, AccessData)
True
```


issubclass
```
>>> from stupid import StupidData
>>> class A(StupidData): pass
>>> class B(A): pass
>>> class C:pass
>>>
>>> issubclass(B, A)
True
>>> issubclass(B, C)
False
```


