有没有人能够解决 PyCharm 中的 PyTorch 特定检查问题?以前关于非 PyTorch 相关问题的帖子建议升级 PyCharm,但我目前使用的是最新版本。一种选择当然是完全禁用某些检查,但我宁愿避免这样做。
示例:torch.LongTensor(x)
给我“意外的参数...”,而两个调用签名(带和不带x
)都受支持。
我相信这是因为pycharmtorch.LongTensor
没有__init__
办法找到。
当您需要控制新实例的创建时,请使用__new__ 。当您需要控制新实例的初始化时,请使用__init__ 。
__new__是实例创建的第一步。它首先被调用,并负责返回你的类的一个新实例。相反,__init__不返回任何东西。它只负责在创建实例后对其进行初始化。
一般来说,你不需要重写__new__,除非你继承了一个不可变类型,比如 str、int、unicode 或 tuple。
由于s 是类型,因此定义 only和 noTensor
是有意义的。new
init
您可以通过测试以下类来试验这种行为:
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
定义的方法。