Я определяю класс NE_Conv2d
и переопределяю его __getattr__
. Когда я пытаюсь получить существующий атрибут из одного экземпляра этого класса, вызывается __getattr__
и вводится бесконечная рекурсия.
Я знаю, что нужно тщательно обращаться с __getattr__
, чтобы избежать бесконечной рекурсии, но, очевидно, атрибут conv
уже существует после вызова __init__
. Поэтому, когда я пытаюсь получить атрибут conv
, __getattr__
не должен вызываться.
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)
Над кодом должен выводиться информация о a
и a.conv
, но при попытке получить a.conv
.
вводится бесконечная рекурсия.