Python inspect.getmembers 不return 所有会员?

Python inspect.getmembers does not return all members?

这是 inspect.getmembers 中的错误,还是预期的行为?

torch.bmm in inspect.getmembers(torch)
False

这不是错误;这是 inspect.getmembers 做的正是它记录要做的事情:

Return all the members of an object in a list of (name, value) pairs sorted by name…

因此,('bmm', torch.bmm) 可能在这样的列表中,但 torch.bmm 不会。


如果你想知道 torch.bmm 是否是 torch 的成员......好吧,你已经 知道 它是,或者 torch.bmm 会提出 AttributeError。但是你可以搜索每对的第二个(值)部分:

any(member == torch.bmm for name, member in inspect.getmembers(torch))

...或者您可以将列表转换为字典并进行搜索:

torch.bmm in dict(inspect.getmembers(torch)).values()

但是,torch.bmm 没有引发异常这一事实已经足以告诉您它存在。如果您想处理它不存在的可能性,那么在获得该异常后进行的任何检查都为时已晚;你只想处理异常:

try:
    torch.bmm
except AttributeError:
    # whatever you wanted to do if it doesn't exist
else:
    # whatever you wanted to do with torch.bmm