也许有人能帮我解决这个问题。我已经用py魅力集成的这个静态类型检查器挣扎了很长时间。
一些规格:
我尝试了以下PyCharm版本。
我试图说明问题。你可以复制
class SpecificCLS:
pass
class CLS:
def __init__(self):
self.integer: int = 0
self.specific_cls: SpecificCLS = SpecificCLS()
def set_im_int(self, value: int):
self.integer = value
def get_im_int(self) -> int:
return self.integer
def get_specific_cls(self) -> SpecificCLS:
return self.specific_cls
def set_specific_cls(self, value: SpecificCLS):
self.specific_cls = value
cls = CLS()
# Example for assigning a class into an integer
cls.integer = SpecificCLS() # PyCharm does NOT show any error/warning that a class is assigned into an variable that is declared as an "int"
cls.set_im_int(SpecificCLS()) # PyCharm recognise an error (underlined red): Expected type 'int', got 'SpecificCLS' instead
# Example for assigning an integer into a class
cls.specific_cls = 1 # PyCharm does NOT show any error/warning that a class is assigned into an variable that is declared as an "int"
cls.set_specific_cls(1) # PyCharm recognise an error (underlined red): Expected type 'SpecificCLS', got 'int' instead
PyCharm屏幕截图
如果您查看这一行,您会注意到没有显示错误。
cls.integer = SpecificCLS() # PyCharm does NOT show any error/warning that a class is assigned into an variable that is declared as an "int"
如果我们使用setter方法来赋值,那么pycharm就可以正确识别错误的赋值。
cls.set_im_int(SpecificCLS()) # PyCharm recognise an error (underlined red): Expected type 'int', got 'SpecificCLS' instead
那么,有人能告诉我为什么setter的类型检查工作得很好,而其他任务却不行吗?
到目前为止,我一直使用getter/setter来验证是否将正确的类型分配给彼此。因此,我将字段标记为private,以便任何人都不能直接更改状态。因为我已经从python 3.5更新了。x至3.7。我想我可以删除这个模板代码。我希望有静态类型检查功能,但我不想强迫我一直使用getter/setter。
我感谢你的帮助。
最好的问候
2020年11月18日更新:12:00很抱歉,这是一个误导性的例子。我试着编辑剪报,希望现在问题已经清楚了。我还试图更详细地解释我在pycharm的执行/性能中看到了什么问题。我还添加了一个更新的屏幕截图。
在@Sylvaus的帮助下,我找出了问题所在并找到了解决方案。
PyCharm不承认违反了PEP-526,但mypy做到了!通过安装Mypy插件
文件-
如果您运行mypy,它将告诉您现在有错误。但需要一段时间才能触发pycharms分析器并显示mypy的结果。
我将尝试将分析器绑定到代码格式快捷方式。如果我能做到的话,我会更新这篇文章。
编辑:感谢用户2235698,这是jetbrains发布的问题https://youtrack.jetbrains.com/issue/PY-36889
py魅力和mypy都是对的,因为bool派生自int,并且通过指示您想要一个int,您接受任何类型派生自int的变量。
您可以通过执行ISUBCLASS(bool,int)
本文向大家介绍Flow之一个新的Javascript静态类型检查器,包括了Flow之一个新的Javascript静态类型检查器的使用技巧和注意事项,需要的朋友参考一下 今天我们兴奋的发布了 Flow 的尝鲜版,一个新的Javascript静态类型检查器。Flow为Javascript添加了静态类型检查,以提高开发效率和代码质量。更明确的说,静态类型检查提供的好处像早期错误检查,帮助你发现一些只有在
本文向大家介绍Dapper.NET 查询静态类型,包括了Dapper.NET 查询静态类型的使用技巧和注意事项,需要的朋友参考一下 示例 对于在编译时已知的类型,请使用带有的通用参数Query<T>。
本文向大家介绍JavaScript静态类型检查工具FLOW简介,包括了JavaScript静态类型检查工具FLOW简介的使用技巧和注意事项,需要的朋友参考一下 Flow是Facebook出品的,针对JavaScript的静态类型检查工具。其代码托管在github之上,并遵守BSD开源协议。 关于Flow 它可以帮助我们捕获JavaScript开发中的常见错误,而不需要额外地修改你原有的代码,比如静
一个机器或语言是用来计算的,根据计算机模型的定义,其操作的是存储器里的数据,就现在流行的用二进制实现的计算机中(曾出现过三进制计算机),数据本质都是0和1,但机器毕竟是为人服务的,解决的是现实问题,它操作的数据需要有现实的含义,所以基本上所有语言都有类型系统,即便是汇编和机器语言,也有整数和浮点的区别 类型系统是很复杂的理论,值得用一本厚书来写,好点的资料有《类型与程序设计语言》,但我没看懂,因为
代码静态检查 我们在代码静态检查中,使用 SonarQube 进行我们的代码质量管理。SonarQube 是一个开源的代码质量管理系统,它可以通过使用插件机制与 IDEA 、Maven 等其他外部工具集成,从而实现了对代码的质量的全面自动化分析和管理。
本文向大家介绍Python静态类型检查新工具之pyright 使用指南,包括了Python静态类型检查新工具之pyright 使用指南的使用技巧和注意事项,需要的朋友参考一下 Python是一门动态类型的语言,民间流传一种说法叫”动态一时爽,重构火葬场”,听起来够吓人的,好在这门语言在不断地改进,包括对 PEP484 引入的类型提示(Type Hint),就是在某种程度上,让Python能够像静态