I believe it's because torch.LongTensor
has no __init__
method for pycharm to find.
According to this source that I found thanks to this SO post :
Use __new__ when you need to control the creation of a new instance.
Use __init__ when you need to control initialization of a new instance.
__new__ is the first step of instance creation. It's called first,
and is responsible for returning a new instance of your class. In
contrast, __init__ doesn't return anything; it's only responsible for
initializing the instance after it's been created.
In general, you shouldn't need to override __new__ unless you're
subclassing an immutable type like str, int, unicode or tuple.
Since Tensor
s are types, it makes sense to define only new
and no init
.
You can experiment this behavior by testing the following classes :
torch.LongTensor(1) # Unexpected arguments
Produces the warning while the following doesn't.
class MyLongTensor(torch.LongTensor):
def __init__(self, *args, **kwargs):
pass
MyLongTensor(1) # No error
To confirm that the absence of __init__
is the culprit try :
class Example(object):
pass
Example(0) # Unexpected arguments
To find out by yourself, use pycharm to Ctrl+click
on LongTensor
then _TensorBase
and look at the defined methods.