【发布时间】:2019-02-01 13:56:27
【问题描述】:
我正在编写以下类结构:
class genericCar(ABC):
baseCarMethodA()
class specificCar(genericCar):
specificCarMethodB()
class genericEngine(ABC):
baseEngineMethodA()
class specificEngine(genericEngine):
specificEngineMethodA()
我想创建一个从许多不同类(如 specificCar 和 specificEngine 等)动态继承的容器对象,以构造一个包含它们的方法和字段的对象。
我通过选择对象应该通过字符串名称继承的通用类类型的实现来做到这一点:
def getBuiltCar(genericCar, genericEngine):
class carFactory(genericCar, genericEngine):
def __init__(self):
pass
return builtCar
这个想法是构建一个继承自(concreteImplofGenericTypeA、concreteImplofGenericTypeB等)的对象(汽车)。
我想这样做:
def testDynamicInheritance():
instance = getBuiltCar("specificCar", "specificEngine")
# Type of object instance is a union of specificCar + specificEngine
# but how do I use Type methods to label instance with the proper type?
instance.<autoSuggests>specificEngineMethodA()
instance.<autoSuggests>specificCarMethodB()
Pycharm 自动补全应该识别出实例继承自“specificCar”和“specificEngine”。所以这本质上是一个动态的 mixin 工厂。
如何使用 Python 的类型系统为 pycharm 提供正确的类型提示,以正确地自动完成动态继承的具体类中的方法和字段?还是我做错了?
【问题讨论】:
-
我不想做的是:python-3-patterns-idioms-test.readthedocs.io/en/latest/… 换句话说,为每个可能的组合创建一个具体的工厂,如果我们只从两个类继承这可能会起作用,但是如果我们需要从第三类继承吗?会有一个具体的工厂类爆炸。
标签: python dynamic mixins factory-pattern type-hinting