Source code for sigmaepsilon.core.attr

# -*- coding: utf-8 -*-
from types import FunctionType
from abc import abstractmethod


[docs]def attributor(*attrs: str) -> FunctionType: """ It renders a decorator a default behaviour. If a decorator is called with a None argument, it returns the attribute, otherwise it returns the decorated function. """ abstract = '__isabstractmethod__' in attrs if abstract: attributes = [x for x in attrs if x != '__isabstractmethod__'] else: attributes = attrs def decorator(fnc): if fnc is None: return attrs else: for attr in attributes: setattr(fnc, attr, True) if abstract: return abstractmethod(fnc) return fnc return decorator
if __name__ == '__main__': axiom = attributor('__isaxiom__') abstractaxiom = attributor('__isaxiom__', '__isabstractmethod__') @axiom def foo(a, b): return 'an axiom' print(foo.__isaxiom__)