"""Abstract classes."""fromabcimportABCMeta,abstractmethodfromcollections.abcimportCallable__all__=('CallableTask','CallableSignature')def_hasattr(C,attr):returnany(attrinB.__dict__forBinC.__mro__)class_AbstractClass(metaclass=ABCMeta):__required_attributes__=frozenset()@classmethoddef_subclasshook_using(cls,parent,C):return(clsisparentandall(_hasattr(C,attr)forattrincls.__required_attributes__))orNotImplemented@classmethoddefregister(cls,other):# we override `register` to return other for use as a decorator.type(cls).register(cls,other)returnother
[文档]classCallableTask(_AbstractClass,Callable):# pragma: no cover"""Task interface."""__required_attributes__=frozenset({'delay','apply_async','apply',})