8

有没有人能够解决 PyCharm 中的 PyTorch 特定检查问题?以前关于非 PyTorch 相关问题的帖子建议升级 PyCharm,但我目前使用的是最新版本。一种选择当然是完全禁用某些检查,但我宁愿避免这样做。

示例:torch.LongTensor(x)给我“意外的参数...”,而两个调用签名(带和不带x)都受支持。

4

1 回答 1

7

我相信这是因为pycharmtorch.LongTensor没有__init__办法找到。

根据这个来源,我发现感谢这个 SO 帖子

当您需要控制新实例的创建时,请使用__new__ 。当您需要控制新实例的初始化时,请使用__init__ 。

__new__是实例创建的第一步。它首先被调用,并负责返回你的类的一个新实例。相反,__init__不返回任何东西。它只负责在创建实例后对其进行初始化。

一般来说,你不需要重写__new__,除非你继承了一个不可变类型,比如 str、int、unicode 或 tuple。

由于s 是类型,因此定义 only和 noTensor是有意义的。newinit

您可以通过测试以下类来试验这种行为:

torch.LongTensor(1)  # Unexpected arguments

产生警告,而以下没有。

class MyLongTensor(torch.LongTensor):
    def __init__(self, *args, **kwargs):
        pass

MyLongTensor(1)  # No error

要确认没有__init__是罪魁祸首,请尝试:

class Example(object):
    pass

Example(0)  # Unexpected arguments

要自己找出来,使用pycharmCtrl+click然后LongTensor查看_TensorBase定义的方法。

于 2017-11-15T16:58:43.380 回答