问题描述
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()
如何使用类型提示重构此代码,以便当我针对 mypy
的实例运行 Parent
时,它会同时识别 subclass_method
和 parent_method
?>
可能的解决方案:
-
使用 mixin
Parent(Mixin)
:有效,但避免使用装饰器。没有可能实现吗? -
将方法修补到现有类上:在 mypy 中解决
subclass_method
仍然存在相同的问题 - 自定义 Mypy 插件:不确定从哪里开始使用这个插件,或者如果没有它是否可行。
解决方法
如果没有包装器,这会简单得多。
SELECT e.EmployeeId,e.FirstName,e.LastName,STUFF((SELECT ',' + COALESCE(LTRIM(RTRIM(t.TerritoryDescription)),'')
FROM EmployeeTerritories et
INNER JOIN Territories t on et.TerritoryID = t.TerritoryID
WHERE et.EmployeeID = e.EmployeeId
FOR XML PATH('') ),1,'') as TerritoryList
FROM Employees e
在这里,您定义 class SomeMixin:
def subclass_method(self):
pass
class Parent(SomeMixin):
def parent_method(self):
pass
p = Parent()
p.parent_method()
p.subclass_method()
一次,而不是每次调用包装器一次,并且类 SomeMixin
是静态已知的。名称为 SomeMixin
的所有各种类都是动态创建的,Subclass
无法静态地知道名称为 mypy
的类实际上是绑定的。