Hi Stefan,
On Wed, 27 Jul 2016, Stefan Behnel wrote:
I wonder if we shouldn't consider the module init function a special
(enough) case here that is never performance critical, and just always
generate a frame for it. Later frame lookups would then still fail (so we'd
create somewhat of an inconsistency), but the case above looks like a
legitimate use case, and namedtuples are often (I guess in *most* cases)
created at module init time.
I created a ticket.
https://github.com/cython/cython/issues/536
Thank you very much for the insightful analysis, makes total sense!
I agree that creating a frame for the init function sounds like a most
reasonable solution, the only drawback that I can see is the inconsistency
you mentioned, but apparently that's as good as it gets...
As a work-around, I could only come up with a hack. You could create a
Python module, import and call into it from your Cython module, create
the namedtuple in Python, and then fix the __module__ reference of the
namedtuple class after the fact. Although I wonder when the insertion
into the module namespace happens. I couldn't find it on a quick look.
Now that you've explained the root cause, I believe that there is a less
disgusting workaround one could possibly go for, what do you think?
class PyTest(namedtuple('Test', 'test')):
pass
--
Sincerely yours,
Yury V. Zaytsev
_______________________________________________
cython-devel mailing list
cython-devel@python.org
https://mail.python.org/mailman/listinfo/cython-devel