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)
Pycharm建议我删除generator
,它位于{
它说:这次检查报告了声明参数和实际参数之间的差异,以及不正确的参数(例如重复的命名参数)和错误的参数顺序。装饰师也被分析了。在
但它的产量是我所期望的。在
示例:
^{pr2}$output: (1, 2, 3)
我是Python新手,所以我认为这可能缺乏标准化。在
我应该如何改进它?在
这不是
tuple
特有的,调用大多数内置类型的特殊方法会导致PyCharm与类型签名混淆。在PyCharm将
tuple.__new__
解析为从builtins.object.__new__
继承的。这不是用来创建元组的真正方法,但是它找不到正确的方法(它不是在.py
文件中,因为它是用C编写的)。在这很可能是一个bug,不幸的是,这不是您可以通过设置来修复的,除非通过禁用不正确的调用参数检查,我不建议这样做。在
底线是PyCharm检查有时会由于必须检查动态类型语言而导致误报。这并不奇怪,有时你不得不忽略它引起的检查错误。在
你的密码上有一个字
{{cd5>你可能想用另一个点来覆盖它。在
^{pr2}$为此,您可以使用默认的
iterable
。在它这样说是因为
tuple
的__new__
方法接受参数__new__(*args, **kwargs)
。在您可能已经找到了一些文档,可以使用
tuple(iterable)
构造一个tuple
实例,用初始值预填充元组。这个iterable
是tuple
类的__init__
方法的参数,而不是__new__
方法的参数。在我想你想用的是}。在Python中,
__init__
而不是{__new__
方法主要用于元编程。可以将__init__
方法视为构造函数,就像在其他语言中使用它一样。__new__
方法用于创建类的实例,因此您需要构造一个object
并返回该实例。例如,您可以使用__new__
来实现singleton模式,方法是始终返回相同的静态对象。__init__
方法只是在实例创建之后初始化它,就像普通构造函数那样。在所以你会用一些类似的东西:
相关问题 更多 >
编程相关推荐