Yes, the fact that it’s a class member is a problem:
>>> class Foo():
... Bar = namedtuple('Bar', ['x','y'])
... def baz(self):
... b = Foo.Bar(x=2, y=3)
... print(type(b))
...
>>> a = Foo()
>>> a.baz()
<class '__main__.Bar'>
The problem is that when namedtuple()
returns a type object, it isn’t aware of the fact that it’s being assigned to a class member – and thus, it tells the type object that its type name should be __main__.Bar
, even though it should really be __main__.Foo.Bar
.