擅长:python、mysql、java
<p>这不是<code>tuple</code>特有的,调用大多数内置类型的特殊方法会导致<em>PyCharm</em>与类型签名混淆。在</p>
<pre><code>str.__new__(str, 'foo') # This will confuse PyCharm even though it is correct
</code></pre>
<p>PyCharm将<code>tuple.__new__</code>解析为从<code>builtins.object.__new__</code>继承的。这不是用来创建元组的真正方法,但是它找不到正确的方法(它不是在<code>.py</code>文件中,因为它是用C编写的)。在</p>
<p><a href="https://i.stack.imgur.com/lDJ6i.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/lDJ6i.png" alt="tuple.__new__"/></a></p>
<p>这很可能是一个bug,不幸的是,这不是您可以通过设置来修复的,除非通过禁用<em>不正确的调用参数</em>检查,我不建议这样做。在</p>
<p>底线是PyCharm检查有时会由于必须检查动态类型语言而导致误报。这并不奇怪,有时你不得不忽略它引起的检查错误。在</p>
<h2>你的密码上有一个字</h2>
<p>{{cd5>你可能想用另一个点来覆盖它。在</p>
^{pr2}$
<p>为此,您可以使用默认的<code>iterable</code>。在</p>
<pre><code>class IntTuple(tuple):
def __new__(cls, iterable=()):
generator = (x for x in iterable if isinstance(x, int) and x > 0)
return super().__new__(cls, generator)
IntTuple() # ()
</code></pre>