有没有人能够解决 PyCharm 中 PyTorch 特定的检查问题?之前针对非 PyTorch 相关问题的帖子建议升级 PyCharm,但我目前使用的是最新版本。一种选择当然是完全禁用某些检查,但我宁愿避免这种情况。
示例:torch.LongTensor(x)给我“意外的参数...”,而两种调用签名(带和不带x)都受支持。
我相信这是因为pycharmtorch.LongTensor没有__init__找到方法。
当您需要控制新实例的创建时,请使用__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并查看定义的方法。
| 归档时间: |
|
| 查看次数: |
1562 次 |
| 最近记录: |