【发布时间】:2020-12-12 02:35:16
【问题描述】:
我有一个自定义测试运行程序,它使用检查来查找以test_ 开头的所有函数。有一次,我向函数对象添加了一个属性。这样做是为了让测试运行者稍后可以访问文档字符串信息。
我真的很想为函数列表创建一个类型提示,以便我的 IDE (pycharm) 知道 tdi 确实是函数对象的一个属性。
如何构建这样的类型提示?
for m, fn in module.__dict__.items():
if m.startswith(prefix):
if callable(fn):
tdi = getTestDocInfo(fn) # reads the docstring for tags and puts the info in a dataclass
fn.tdi = tdi
tests.append(fn)
编辑:
在这种情况下,类型提示应该传达对象是一个函数并且它具有属性tdi。
正如@chepner 指出的那样,这里需要 Protocol 类型提示的构建块。
这是有效的。
@runtime_checkable
class TestFunc(Protocol):
tdi: TestDocInfo
def __call__(self, testresult: TestResult, shareditems: SharedItems): pass
tests: List[TestFunc]. #type hint I am looking for.
【问题讨论】:
-
最初我不认为这些是相关的,因为将自定义属性添加到
function对象的性质。但我认为你是对的,这些本质上是同一个问题。唯一真正的区别是我仍然需要类型提示来传达它也是function的事实。这要求我也包含__call__的定义。
标签: python python-3.x type-hinting