<p>也许有人能帮我。
我已经为这个pycharm集成的静态类型检查器奋斗了很长时间</p>
<p>一些规格:</p>
<ul>
<li>Python 3.7.7</li>
<li>Windows 10 Pro x64</li>
</ul>
<p>我试过以下版本</p>
<ul>
<li>专业2020.1.3</li>
<li>社区2020.2.3</li>
</ul>
<p>我试图说明这个问题。你可以复制&;将其粘贴到PyCharm中以验证问题</p>
<pre><code>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
</code></pre>
<p><a href="https://i.stack.imgur.com/Zdh9w.png" rel="nofollow noreferrer">PyCharm Screenshot</a></p>
<p>如果您查看这一行,您将注意到没有显示任何错误</p>
<pre><code>cls.integer = SpecificCLS() # PyCharm does NOT show any error/warning that a class is assigned into an variable that is declared as an "int"
</code></pre>
<p>如果我们使用setter方法来分配值,pycharm就是正确识别错误的分配</p>
<pre><code>cls.set_im_int(SpecificCLS()) # PyCharm recognise an error (underlined red): Expected type 'int', got 'SpecificCLS' instead
</code></pre>
<p>那么,有谁能告诉我为什么setter的类型检查工作得很好,而其他任务却不行</p>
<p>到目前为止,我一直使用getter/setter来验证是否将正确的类型分配给彼此。因此,我将字段标记为private,以便没有人可以直接更改状态。
因为我已经从Python3.5.x更新到了3.7.x,所以我认为我可以删除这个样板代码。我希望有静态类型检查功能,但我不想强迫我一直使用getter/setter</p>
<p>我感谢你的帮助</p>
<p>致意</p>
<p><strong>2020年11月18日更新:12:00</strong>
对不起,这个误导性的例子。我试着编辑剪报,希望问题现在清楚了。我还试图更详细地解释我在pycharm的执行/性能中看到的问题。我还添加了一个更新的屏幕截图</p>