On 14/08/2016 05:20, Chris Angelico wrote:
On Sun, Aug 14, 2016 at 2:13 PM, Steven D'Aprano
<steve+pyt...@pearwood.info> wrote:
What you should be doing is comparing the types of record *instances*
instead:
py> x = record('Spam', 'breakfast lunch dinner')('spam',
... 'spam and eggs', 'spam and eggs and spam with a side-dish of spam')
py> y = record('Date', 'year month day')(1999, 'August', 14)
py> type(x), type(y)
(<class '__main__.record.<locals>.Inner'>,
<class '__main__.record.<locals>.Inner'>)
Hmmm. I didn't expect that. I expected to see the names of the classes:
py> type(x).__name__, type(y).__name__
('Spam', 'Date')
If I was publishing this as a polished product, I'd want to fix that.
But at this point, you're at the level of minor tweaks, not core
functionality - and more importantly, proof of concept is successful.
You have a working class factory, which is downright *impossible* in
many languages.
Well, it's using exec(). So it is generating new program code at
runtime. That is possible in quite a few languages, even C.
Python is much better however in being able to integrate the results
into the currently running program that invoked exec().
(Myself, I generally stay away from language building and extension
features. I believe it leads to more complex languages - look at C++ -
that can be difficult to follow.)
--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list