我定义一个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
时输入无限递归。
答案 0 :(得分:0)
我似乎知道这是怎么回事... setattr
中的getattr
和nn.Module
已重新加载...