__getattr__ of subclass of nn.Module misbehaves

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 .

OK silly me. After overloads __getattr__, self.conv causes infinite recursion.