I've been porting the grammar for pydev to version 2.5 and I've seen that you can now declare a class in the format: class B():pass (without the testlist) -- from the grammar: classdef: 'class' NAME ['(' [testlist] ')'] ':' suite I think that this change should be presented at http://docs.python.org/dev/whatsnew/whatsnew25.html I'm saying that because I've only stumbled upon it by accident -- and I wasn't able to find any explanation on the reason or semantics of the change... Thanks, Fabio
I think that this change should be presented at http://docs.python.org/dev/whatsnew/whatsnew25.html
It's already listed there: http://docs.python.org/dev/whatsnew/other-lang.html -- Lawrence http://www.oluyede.org/blog
On 9/16/06, Lawrence Oluyede <l.oluyede@gmail.com> wrote:
I think that this change should be presented at http://docs.python.org/dev/whatsnew/whatsnew25.html
It's already listed there: http://docs.python.org/dev/whatsnew/other-lang.html
Thanks... also, I don't know if the empty yield statement is mentioned too (I couldn't find it either). Cheers, Fabio
Fabio Zadrozny wrote:
On 9/16/06, Lawrence Oluyede <l.oluyede@gmail.com> wrote:
I think that this change should be presented at http://docs.python.org/dev/whatsnew/whatsnew25.html It's already listed there: http://docs.python.org/dev/whatsnew/other-lang.html
Thanks... also, I don't know if the empty yield statement is mentioned too (I couldn't find it either).
It's part of the PEP 342 changes. However, I don't believe AMK mentioned that part explicitly in the What's New. Cheers, Nick. -- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia --------------------------------------------------------------- http://www.boredomandlaziness.org
Fabio Zadrozny wrote:
I've been porting the grammar for pydev to version 2.5 and I've seen that you can now declare a class in the format: class B():pass (without the testlist)
-- from the grammar: classdef: 'class' NAME ['(' [testlist] ')'] ':' suite
I think that this change should be presented at http://docs.python.org/dev/whatsnew/whatsnew25.html
I'm saying that because I've only stumbled upon it by accident -- and I wasn't able to find any explanation on the reason or semantics of the change...
Lawrence already noted that this is already covered by the What's New document (semantically, it's identical to omitting the parentheses entirely). As for the reason: it makes it possible to use the same style for classes without bases as is used for functions without arguments. Prior to this change, there was a sharp break in the class syntax, such that if you got rid of the last base class you had to get rid of the parentheses as well. Cheers, Nick. -- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia --------------------------------------------------------------- http://www.boredomandlaziness.org
Nick Coghlan wrote:
As for the reason: it makes it possible to use the same style for classes without bases as is used for functions without arguments. Prior to this change, there was a sharp break in the class syntax, such that if you got rid of the last base class you had to get rid of the parentheses as well.
Is the result a new-style or classic-style class? It would be nice if using the empty parens forced a new-style class... -- Talin
On 9/16/06, Talin <talin@acm.org> wrote:
Nick Coghlan wrote:
As for the reason: it makes it possible to use the same style for classes without bases as is used for functions without arguments. Prior to this change, there was a sharp break in the class syntax, such that if you got rid of the last base class you had to get rid of the parentheses as well.
Is the result a new-style or classic-style class? It would be nice if using the empty parens forced a new-style class...
That was my first thought as well. Unfortunately a quick test shows that class Foo(): creates an old style class instead :( -- Gustavo J. A. M. Carneiro "The universe is always one step beyond logic."
That was my first thought as well. Unfortunately a quick test shows that class Foo(): creates an old style class instead :(
I think that's because until it'll be safe to break things we will stick with classic by default... -- Lawrence http://www.oluyede.org/blog
Lawrence Oluyede wrote:
That was my first thought as well. Unfortunately a quick test shows that class Foo(): creates an old style class instead :(
I think that's because until it'll be safe to break things we will stick with classic by default...
But in this case nothing will be broken, since the () syntax was formerly not allowed, so it won't appear in any existing code. So it would have been a good opportunity to shift over to increased usage new-style classes without breaking anything. Thus, 'class Foo:' would create a classic class, but 'class Foo():' would create a new-style class. However, once it's released as 2.5 that will no longer be the case, as people might start to use () to indicate a classic class. Oh well. -- Talin
On 9/16/06, Talin <talin@acm.org> wrote:
Lawrence Oluyede wrote:
That was my first thought as well. Unfortunately a quick test shows that class Foo(): creates an old style class instead :(
I think that's because until it'll be safe to break things we will stick with classic by default...
But in this case nothing will be broken, since the () syntax was formerly not allowed, so it won't appear in any existing code. So it would have been a good opportunity to shift over to increased usage new-style classes without breaking anything.
Thus, 'class Foo:' would create a classic class, but 'class Foo():' would create a new-style class.
However, once it's released as 2.5 that will no longer be the case, as people might start to use () to indicate a classic class. Oh well.
We didn't want there to suddenly be a way to make a new-style class that didn't explicitly subclass 'object'. -Brett
Talin wrote:
Nick Coghlan wrote:
As for the reason: it makes it possible to use the same style for classes without bases as is used for functions without arguments. Prior to this change, there was a sharp break in the class syntax, such that if you got rid of the last base class you had to get rid of the parentheses as well.
Is the result a new-style or classic-style class? It would be nice if using the empty parens forced a new-style class...
This was considered & rejected by Guido as too subtle a distinction. So you still need to set __metaclass__=type (or inherit from such a class) to get a new-style class. Cheers, Nick. -- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia --------------------------------------------------------------- http://www.boredomandlaziness.org
participants (7)
-
Brett Cannon
-
Fabio Zadrozny
-
Greg Ewing
-
Gustavo Carneiro
-
Lawrence Oluyede
-
Nick Coghlan
-
Talin