【发布时间】:2019-01-19 12:23:50
【问题描述】:
当我通过以下代码运行 mypy 时,我看到了几个错误:
from typing import Callable, Type
def class_creator(outside_reference: Callable[[str], None]) -> Type[object]:
class SomeClass():
reference: Callable[[str], None]
def __init__(self) -> None:
self.reference = outside_reference
super().__init__()
def __str__(self):
self.reference("SomeClass instance")
return SomeClass
def callback(string: str) -> None:
print("Prepping: " + string)
instance = class_creator(callback)()
print(instance)
以下是错误:
test.py:9: error: Cannot assign to a method
test.py:9: error: Invalid self argument "SomeClass" to attribute function "reference" with type "Callable[[str], None]"
test.py:9: error: Incompatible types in assignment (expression has type "Callable[[str], None]", variable has type "Callable[[], None]")
第 9 行是self.reference = outside_reference。
我基本上可以肯定我只是误解了某些东西,但我就是看不出哪里出错了。
这是最小的可重复参考。如果我将类型从Callable[[str], None] 更改为int(实际上并没有调用它),那么它运行得很好,不会显示任何错误。只有当我切换到Callable 时,它才会开始显示这些错误。
我的注释应该在这里?
【问题讨论】:
-
我有一个解决方案:如果您删除
reference声明(第 6 行),错误将消失。我有一些想法(关于mypy将可调用字段声明作为方法声明处理),但不确定它们是否正确 -
这可以解决,当然,但我想要那里的注释,以便使用此代码的任何人都清楚这些类型是什么。