New submission from Erez Zinman <erezinman.program...@gmail.com>:
Consider the following code: ``` from abc import ABC, abstractmethod from functools import wraps class A(ABC): @abstractmethod def f(self): pass @wraps(f) def wrapper(self): print('f is called!') f() class B(A): def f(self): print('f!') B() ``` The last line of code results in the following error: >>> TypeError: Can't instantiate abstract class B with abstract methods wrapper That happens because `wraps` copies the `__dict__` of the original function. The problem is that at the point of declaration, the `__dict__` also contained `__isabstractmethod__=True` so it was copied as well, and it caused an error on the class' instantiation even though it contained no abstract methods. Moreover, this behavior is misleading because the the wrapper function is not abstract. Thanks. ---------- components: Extension Modules, Library (Lib) messages: 385538 nosy: erezinman priority: normal severity: normal status: open title: @functools.wraps and abc.abstractmethod interoperability type: behavior versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43010> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com