我尝试一致地使用类型注解,但遇到了@property注解的问题。下面的代码在print语句处失败,并出现“cannot create weak reference to 'property' object”错误。
from typeguard import typechecked
@typechecked
class A:
def __init__(self):
self._p = 1
@property
def p(self) -> int:
return self._p
a = A()
print(a.p)
这会导致以下错误:
Exception has occurred: TypeError
cannot create weak reference to 'property' object
File "C:\Code\ExploreSims\scratch.py", line 9, in p
def p(self) -> int:
File "C:\Code\ExploreSims\scratch.py", line 13, in <module>
print(a.p)
^^^
TypeError: cannot create weak reference to 'property' object
如果我删除类型注解,它运行正常。这里发生了什么?我如何解决它。
编辑
在这两种情况下会发生完全相同的错误:
- 将@typechecked注解移动到属性本身
- 将A移动到外部文件,并使用install_import_hook导入
1条答案
按热度按时间kiayqfof1#
这是一个known and fixed bug(在
typeguard
中),修复程序于2023年4月2日作为4.0.0rc1的一部分发布。