Python modules are hard. modulemeta
attempts to make them easier to write in the interpreter.
>>> from modulemeta import Module
>>> class Wat(metaclass=Module):
... _ermelon = 5
...
... def ermelon(): # type: ignore[misc]
... return _ermelon
...
>>> Wat.ermelon()
5
>>> Wat
<module 'Wat'>
Shockingly, modules cannot be inherited from, therefore they are treated as metaclasses:
from modulemeta import Module
class Wat(metaclass=Module):
pass
class Wat2(metaclass=Wat): # type: ignore[misc]
pass