Closed
Description
A decorator that changes the signature of a function is rejected if the old signature isn't consistent with the superclass. E.g.:
def convert_to_bool(f):
# type: (Callable[..., int]) -> Callable[..., bool]
def wrapper(*n, **kw):
i = f(*n, **kw)
return i < 10
return wrapper
class Base(object):
def f(self):
# type: () -> bool
return True
class Derived(Base):
@convert_to_bool
def f(self):
# type: () -> int
return 20
The interesting point here is that the base class doesn't use the decorator while the child does. Our particular issue is in code that uses contextlib.contextmanager, but I think we can work around it by adding the decorator to the base class.