PyCharm 中的 PyTorch 特定检查问题

rd1*_*d11 8 pycharm pytorch

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

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

Vic*_*r T 7

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

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

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

__new__是实例创建的第一步。它首先被调用,负责返回类的新实例。相比之下,__init__不返回任何东西;它只负责在创建实例后初始化实例。

通常,除非您子类化不可变类型(如 str、int、unicode 或 tuple),否则您不需要覆盖__new__

由于Tensors 是类型,因此定义 onlynew和 no是有意义的init

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

torch.LongTensor(1)  # Unexpected arguments
Run Code Online (Sandbox Code Playgroud)

产生警告,而以下不产生。

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

MyLongTensor(1)  # No error
Run Code Online (Sandbox Code Playgroud)

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

class Example(object):
    pass

Example(0)  # Unexpected arguments
Run Code Online (Sandbox Code Playgroud)

要自己找出来,请使用 pycharm to Ctrl+clickon LongTensorthen_TensorBase并查看定义的方法。