Grammar for classes
Robert Kern
robert.kern at gmail.com
Tue Dec 20 12:20:12 EST 2011
On 12/20/11 5:05 PM, Joshua Landau wrote:
> On 20 December 2011 10:55, Robert Kern <robert.kern at gmail.com
> <mailto:robert.kern at gmail.com>> wrote:
>
> On 12/20/11 1:34 AM, Joshua Landau wrote:
>
> In reading thorough the syntax defined in the reference
> <http://docs.python.org/py3k/__reference/compound_stmts.html#__class-definitions
> <http://docs.python.org/py3k/reference/compound_stmts.html#class-definitions>>,
>
> the class statement has surprised me.
>
> It says that the inheritance part of the class can accept
> comprehensions. What
> does this mean?
> I've tried:
> "class A(x for x in ()): pass"
> but this doesn't need the extra clause as "x for x in ()" is an
> expression, and
> thus this evaluates:
> "class A(x for x in (),): pass"
> although again it won't be a valid class anytime soon.
>
> So what is this clause for?
>
>
> I suspect that it's harder to make a grammar rule that allows every kind of
> expression except for generator expressions than it is just to reuse the
> "testlist" rule and let the runtime reject the generator object when it goes
> to construct the class.
>
>
> The thing is, as far as I can tell, the grammar would be the same without the
> added clause. That is because it's a valid grammar anyway. The only exception I
> can think of is if generators were treated exceptionally. Thus, while I agree it
> makes complete sense to make it a runtime error, the clause in the specification
> seems to be fluff.
>
> Also - what is this "testlist" rule thee speaks of?
Sorry, I was looking at the actual 2.7 Grammar file. "testlist" has been renamed
to "arglist" in the 3.2 version of the Grammar, but the substantive point I made
remains (to the extent that it is relevant at all).
That said, the documentation for both versions differs from a simple restatement
of the Grammar rules, so I'm not sure exactly why the documentation is written
the way it is.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
More information about the Python-list
mailing list