Message362253
I guess the method checks for annotation on cls [0] which will be classmethod/staticmethod object in the report and won't have annotations. The annotations should be looked up in the function the classmethod/staticmethod decorator wraps around as in cls.__func__ . Something like below so that the right annotations are picked up. In addition to this the registry should store the type annotation as key to cls or cls.__func__ depending on normal method or classmethod/staticmethod.
diff --git Lib/functools.py Lib/functools.py
index 050bec8605..a66711208d 100644
--- Lib/functools.py
+++ Lib/functools.py
@@ -1073,24 +1073,33 @@ def singledispatch(func):
if func is None:
if isinstance(cls, type):
return lambda f: register(cls, f)
- ann = getattr(cls, '__annotations__', {})
+ if isinstance(cls, (classmethod, staticmethod)):
+ ann = getattr(cls.__func__, '__annotations__', {})
+ func = cls.__func__
+ else:
+ ann = getattr(cls, '__annotations__', {})
+ func = cls
[0] https://github.com/python/cpython/blob/ab6423fe2de0ed5f8a0dc86a9c7070229326b0f0/Lib/functools.py#L1076 |
|
Date |
User |
Action |
Args |
2020-02-19 05:36:16 | xtreak | set | recipients:
+ xtreak, ncoghlan, lukasz.langa, levkivskyi, Viktor Roytman |
2020-02-19 05:36:16 | xtreak | set | messageid: <1582090576.86.0.973261276625.issue39679@roundup.psfhosted.org> |
2020-02-19 05:36:16 | xtreak | link | issue39679 messages |
2020-02-19 05:36:16 | xtreak | create | |
|