【发布时间】:2019-02-06 05:50:37
【问题描述】:
我在 Python 2.7 中定义了一个类,如下所示:
from future.builtins import object
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
在 PyCharm 中,这会在 __init__ 行中给出警告:
Signature is not compatible to __new__.
我不明白这个警告告诉我什么。有人可以举一个例子,这个警告会正确地捕获错误,或者可以关闭这个警告吗?
有一个 PyCharm 线程,但它对我没有帮助:https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000254530-PyCharm-init-Signature-is-not-compatible-to-new-
【问题讨论】:
-
我能找到的唯一
future.builtins模块在其API 中没有列出object,那么您究竟在那里导入什么?如果您使用标准object,您会收到相同的警告吗?无论如何,这个警告背后的原因是,如果一个类同时定义了__new__和__init__,它们必须具有兼容的参数,因为通常会将相同的参数传递给两者(一个例外是@987654331 的模糊可能性@ 返回一个不相关类的实例)。 -
“我能找到的唯一 future.builtins 模块没有在其 API 中列出对象”:这个github.com/PythonCharmers/python-future/blob/…“无论如何,这个警告背后的原因是,如果一个类同时定义了 new 和 init" 从理论上讲是有道理的,但据我所知,没有人会覆盖
__new__。 -
我猜你只是想创建一个 new style 类,它在 Python 3 中成为标准。为此你可以简单地使用
object而无需导入任何东西 -
@knub 如果没有人覆盖
__new__,它怎么知道它应该接受参数x和y以与您的__init__兼容?就像 guidot 写的那样,您可以使用 object 来定义新样式的类,而无需导入任何东西。我怀疑您未来的导入会导致这些问题。
标签: python python-2.7 pycharm python-2to3