Say I have the following simple example without any typehints:
def wrapper(cls):
class Subclass(cls):
def subclass_method(self):
pass
return Subclass
@wrapper
class Parent:
def parent_method(self):
pass
p = Parent()
p.parent_method()
p.subclass_method()
How can I restructure this code using typehints, such that when I run mypy against an instance of Parent, it will recognize both subclass_method and parent_method?
Possible solutions:
- Using a mixin
Parent(Mixin): Works, but avoids the decorator. Is it possible to achieve without? - Patching the method onto the existing class: Still has the same issue of resolving
subclass_methodin mypy - Custom Mypy plugin: Wouldn't be sure where to start with this one, or if it would be possible without one.
This would be much simpler without the wrapper at all.
Here, you define
SomeMixinonce, not once per call to a wrapper, and the classSomeMixinis known statically. All the various classes with the nameSubclassare created dynamically, andmypycan't know statically which class the nameParentis actually bound to.