I define a NE_Conv2d
class and override its __getattr__
. When I try to get an existing attribute from one instance of this class, __getattr__
is called and enter infinite recursion.
I know one need to deal with __getattr__
carefully to avoid infinite recursion, but apparently the conv
attribute already exists after __init__
is called. So when I try to get conv
attribute, __getattr__
should not be called.
from torch import nn
class NE_Conv2d(nn.Module):
'''Nonexpansive conv2d'''
def __init__(self, *k, **kw):
super(NE_Conv2d, self).__init__()
self.conv = nn.Conv2d(*k, **kw)
print('foo')
def __getattr__(self, attr):
return getattr(self.conv, attr)
a = NE_Conv2d(3, 32, 5)
print(a)
print(a.conv)
Above code should print info about a
and a.conv
, but enter infinite recursion when trying to get a.conv
.