动态创建子类的类型注解
Type annotations for dynamically created subclasses
我想在启动时使用 type()
函数动态创建子 类。一切都按预期工作。
我知道这不是很好,但我受制于一个框架并且必须这样做。另一种选择是生成源代码...
功能等同于我的代码:
class BaseEntity:
id: str
def make_new_entity(name: str, attrs: dict) -> type:
return type('RuntimeEntity', (BaseEntity,), attrs)
RuntimeEntity: ??? = make_new_entity('RuntimeEntity', {'id': 'entity.RuntimeEntity'})
有没有办法提供对返回类型的绑定?基本上相当于
E = TypeVar('E', bound='BaseEntity')
我也看过 types
模块。
感谢您的帮助!
typing.Type
允许您指定值应该是实际类型,而不是该类型的实例。
from typing import Type
class BaseEntity:
id: str
def make_new_entity(name: str, attrs: dict) -> Type[BaseEntity]:
return type('RuntimeEntity', (BaseEntity,), attrs)
RuntimeEntity: Type[BaseEntity] = make_new_entity('RuntimeEntity', {'id': 'entity.RuntimeEntity'})
类型 Type[BaseEntity]
的值可以是 BaseEntity
本身,或任何继承自 BaseEntity
的 class。 (描述这个的术语是协方差。如果Type
是不变,Type[BaseEntity]
会接受BaseEntity
仅自身。)
我想在启动时使用 type()
函数动态创建子 类。一切都按预期工作。
我知道这不是很好,但我受制于一个框架并且必须这样做。另一种选择是生成源代码...
功能等同于我的代码:
class BaseEntity:
id: str
def make_new_entity(name: str, attrs: dict) -> type:
return type('RuntimeEntity', (BaseEntity,), attrs)
RuntimeEntity: ??? = make_new_entity('RuntimeEntity', {'id': 'entity.RuntimeEntity'})
有没有办法提供对返回类型的绑定?基本上相当于
E = TypeVar('E', bound='BaseEntity')
我也看过 types
模块。
感谢您的帮助!
typing.Type
允许您指定值应该是实际类型,而不是该类型的实例。
from typing import Type
class BaseEntity:
id: str
def make_new_entity(name: str, attrs: dict) -> Type[BaseEntity]:
return type('RuntimeEntity', (BaseEntity,), attrs)
RuntimeEntity: Type[BaseEntity] = make_new_entity('RuntimeEntity', {'id': 'entity.RuntimeEntity'})
类型 Type[BaseEntity]
的值可以是 BaseEntity
本身,或任何继承自 BaseEntity
的 class。 (描述这个的术语是协方差。如果Type
是不变,Type[BaseEntity]
会接受BaseEntity
仅自身。)