why are people still using classic classes?

Discussion in 'Python' started by Simon Wittber, Jan 13, 2005.

  1. I've noticed that a few ASPN cookbook recipes, which are recent
    additions, use classic classes.

    I've also noticed classic classes are used in many places in the
    standard library.

    I've been using new-style classes since Python 2.2, and am suprised
    people are still using the classic classes.

    Is there a legitimate use for classic classes that I am not aware of?
    Is there a project to specifically migrate standard library classes to
    new-style classes?

    Sw.
     
    Simon Wittber, Jan 13, 2005
    #1
    1. Advertising

  2. Simon Wittber

    Roy Smith Guest

    Simon Wittber <> wrote:
    > Is there a legitimate use for classic classes that I am not aware of?


    Is there a reason NOT to use them? If a classic class works fine, what
    incentive is there to switch to new style classes? I realize it's not
    much effort to put "(object)" after your class name, but I'm lazy and
    don't bother. I don't see how I've been hurt by that.

    Obviously, if there was some feature of new style classes I wanted to
    use, it would be a different story.
     
    Roy Smith, Jan 13, 2005
    #2
    1. Advertising

  3. > Is there a reason NOT to use them? If a classic class works fine, what
    > incentive is there to switch to new style classes?


    Perhaps classic classes will eventually disappear? It seems strange
    (and is difficult to explain to my peers) that a language offers two
    different ways to define a standard class.

    Sw.
     
    Simon Wittber, Jan 13, 2005
    #3
  4. Simon Wittber

    John Roth Guest

    "Simon Wittber" <> wrote in message
    news:...
    > I've noticed that a few ASPN cookbook recipes, which are recent
    > additions, use classic classes.
    >
    > I've also noticed classic classes are used in many places in the
    > standard library.
    >
    > I've been using new-style classes since Python 2.2, and am suprised
    > people are still using the classic classes.
    >
    > Is there a legitimate use for classic classes that I am not aware of?
    > Is there a project to specifically migrate standard library classes to
    > new-style classes?


    Part of it is simply that it's a bit easier: you don't have to
    inherit from object.

    AFAIK, there's no project to migrate the standard library, and I'm
    not at all sure that would be a good idea since existing programs
    that asssume classic class behavior would be affected when
    classes they inherited from suddenly changed.

    Classic classes will go away sometime in the future, currently
    planned for the semi-mythical 3.0 release.

    John Roth
    >
    > Sw.
     
    John Roth, Jan 13, 2005
    #4
  5. Simon Wittber

    Paul Rubin Guest

    Simon Wittber <> writes:
    > Is there a legitimate use for classic classes that I am not aware of?


    Yes, new-style classes don't work in older Python installations. Some
    Python users prefer not to be on such a frequent upgrade treadmill, so
    they continue to use old versions. Therefore, anyone writing Python
    code for wide distribution should avoid using new-style classes (and
    other new Python features) unless they have a good reason.
     
    Paul Rubin, Jan 13, 2005
    #5
  6. Simon Wittber

    Paul Rubin Guest

    Simon Wittber <> writes:
    > > Is there a reason NOT to use them? If a classic class works fine, what
    > > incentive is there to switch to new style classes?

    >
    > Perhaps classic classes will eventually disappear?


    It just means that the formerly "classic" syntax will define a
    new-style class. Try to write code that works either way.

    It would be nice if a __future__ directive were added right now (if
    it's not there already) that processes all class definitions as
    new-style. Otherwise there's no easy way to test for compatibility.
     
    Paul Rubin, Jan 13, 2005
    #6
  7. Simon Wittber

    Aahz Guest

    In article <>,
    Simon Wittber <> wrote:
    >
    >Is there a legitimate use for classic classes that I am not aware of?
    >Is there a project to specifically migrate standard library classes to
    >new-style classes?


    Exceptions, in addition to the other excellent reasons you've been
    provided.
    --
    Aahz () <*> http://www.pythoncraft.com/

    "19. A language that doesn't affect the way you think about programming,
    is not worth knowing." --Alan Perlis
     
    Aahz, Jan 13, 2005
    #7
  8. On 12 Jan 2005 20:06:39 -0800, Paul Rubin <http://> wrote:

    >Simon Wittber <> writes:
    >> > Is there a reason NOT to use them? If a classic class works fine, what
    >> > incentive is there to switch to new style classes?

    >>
    >> Perhaps classic classes will eventually disappear?

    >
    >It just means that the formerly "classic" syntax will define a
    >new-style class. Try to write code that works either way.
    >
    >It would be nice if a __future__ directive were added right now (if
    >it's not there already) that processes all class definitions as
    >new-style. Otherwise there's no easy way to test for compatibility.


    UIAM, it's not so bad:

    >>> class C: pass

    ...
    >>> type(C)

    <type 'classobj'>
    >>> class D(object): pass

    ...
    >>> type(D)

    <type 'type'>
    >>> __metaclass__ = type
    >>> class E: pass

    ...
    >>> type(E)

    <type 'type'>

    So I guess you can put __metaclass__ = type where you would have done the __future__ thing.

    If you want to do a special metaclass thing (even using a proper class ;-),
    you can override the global __metaclass__

    >>> def MC(*a): print a; return type(*a)

    ...
    >>> class F:

    ... __metaclass__ = MC
    ... pass
    ...
    ('F', (), {'__module__': '__main__', '__metaclass__': <function MC at 0x02EE8D4C>})

    Regards,
    Bengt Richter
     
    Bengt Richter, Jan 13, 2005
    #8
  9. Simon Wittber

    Tim Roberts Guest

    Simon Wittber <> wrote:

    >I've noticed that a few ASPN cookbook recipes, which are recent
    >additions, use classic classes.
    >
    >I've also noticed classic classes are used in many places in the
    >standard library.
    >
    >I've been using new-style classes since Python 2.2, and am suprised
    >people are still using the classic classes.
    >
    >Is there a legitimate use for classic classes that I am not aware of?
    >Is there a project to specifically migrate standard library classes to
    >new-style classes?


    Probably because there is still no compelling reason to break the old
    habits and type those 6 extra characters.

    Once a person has a case where the new classes make a difference, I suspect
    they catch the new habit and never look back. I haven't crossed that
    threshhold yet.
    --
    - Tim Roberts,
    Providenza & Boekelheide, Inc.
     
    Tim Roberts, Jan 13, 2005
    #9
  10. Simon Wittber

    Peter Hansen Guest

    Paul Rubin wrote:
    > Simon Wittber <> writes:
    >
    >>>Is there a reason NOT to use them? If a classic class works fine, what
    >>>incentive is there to switch to new style classes?

    >>
    >>Perhaps classic classes will eventually disappear?

    >
    > It just means that the formerly "classic" syntax will define a
    > new-style class. Try to write code that works either way.


    Unfortunately, if we should follow the recent advice about
    always using "super()" in the __init__ method, it's hard
    to do what you suggest (though it sounds like good advice)
    without resorting to extreme ugliness:

    >>> class Classic:

    .... def __init__(self):
    .... super(Classic, self).__init__()
    ....
    >>> c = Classic()

    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    File "<stdin>", line 3, in __init__
    TypeError: super() argument 1 must be type, not classobj

    Could classic classes ever be removed without us having manually
    to fix all __init__ calls to the superclass?

    -Peter
     
    Peter Hansen, Jan 13, 2005
    #10
  11. Simon Wittber

    Aahz Guest

    In article <>,
    Peter Hansen <> wrote:
    >
    >Unfortunately, if we should follow the recent advice about always using
    >"super()" in the __init__ method, it's hard to do what you suggest
    >(though it sounds like good advice) without resorting to extreme
    >ugliness:
    >
    > >>> class Classic:

    >... def __init__(self):
    >... super(Classic, self).__init__()
    >...
    > >>> c = Classic()

    >Traceback (most recent call last):
    > File "<stdin>", line 1, in ?
    > File "<stdin>", line 3, in __init__
    >TypeError: super() argument 1 must be type, not classobj
    >
    >Could classic classes ever be removed without us having manually
    >to fix all __init__ calls to the superclass?


    Maybe. If you follow the python-dev thread about "super() considered
    harmful", you'll learn that Guido believes super() should only be used
    with class hierarchies explicitly designed for the purpose. Given that,
    you'd have to do a lot of other changes to support super() and it's less
    outrageous.
    --
    Aahz () <*> http://www.pythoncraft.com/

    "19. A language that doesn't affect the way you think about programming,
    is not worth knowing." --Alan Perlis
     
    Aahz, Jan 13, 2005
    #11
  12. > Unfortunately, if we should follow the recent advice about
    > always using "super()" in the __init__ method, it's hard
    > to do what you suggest (though it sounds like good advice)
    > without resorting to extreme ugliness:


    'import this' also provides some good advice:

    "There should be one-- and preferably only one --obvious way to do it."

    It seems to me that python is not as simple/clean as it once was. It
    has grown warts, for the sake of backwards compatibility. :(

    Sw.
     
    Simon Wittber, Jan 13, 2005
    #12
  13. Simon Wittber

    Aahz Guest

    In article <>,
    Simon Wittber <> wrote:
    >
    >'import this' also provides some good advice:
    >
    >"There should be one-- and preferably only one --obvious way to do it."
    >
    >It seems to me that python is not as simple/clean as it once was. It
    >has grown warts, for the sake of backwards compatibility. :(


    That's progress. One of the primary goals for Python 3.0 is to make a
    fresh start by removing a lot of the backwards compatibility.
    --
    Aahz () <*> http://www.pythoncraft.com/

    "19. A language that doesn't affect the way you think about programming,
    is not worth knowing." --Alan Perlis
     
    Aahz, Jan 13, 2005
    #13
  14. Simon Wittber <> wrote:
    > I've noticed that a few ASPN cookbook recipes, which are recent
    > additions, use classic classes.
    >
    > I've also noticed classic classes are used in many places in the
    > standard library.
    >
    > I've been using new-style classes since Python 2.2, and am suprised
    > people are still using the classic classes.
    >
    > Is there a legitimate use for classic classes that I am not aware of?
    > Is there a project to specifically migrate standard library classes to
    > new-style classes?


    I'm guessing that the biggest contributor to the continued prevalence
    of classic classes is the official Python Tutorial:
    http://docs.python.org/tut/node11.html#SECTION0011300000000000000000

    I came into Python around the 2.2 timeframe and used the tutorial as
    my starting point. I had often read people referring to "classic
    classes" but assumed that it was some old pre-2.2 thing that I need
    not worry about. For the longest time, I had assumed that I was using
    new style classes because I created them exactly as prescribed in the
    2.2 tutorial (which still hasn't changed for 2.3 or 2.4).

    Now, classic classes are my habit and I see no compelling reason to
    put in the effort to change my habits.

    Regards,
    - Mike
     
    Michael Hobbs, Jan 13, 2005
    #14
  15. Simon Wittber

    Jarek Zgoda Guest

    Paul Rubin wrote:

    >>>Is there a reason NOT to use them? If a classic class works fine, what
    >>>incentive is there to switch to new style classes?

    >>
    >>Perhaps classic classes will eventually disappear?

    >
    > It just means that the formerly "classic" syntax will define a
    > new-style class. Try to write code that works either way.


    Ideally, I'd like to have them working like in Delphi, where it doesn't
    matter if you declare it as TSomeClass(TObject) or simply TSomeClass, it
    is assumed that class is inherited from TObject if no other class is
    specified.

    --
    Jarek Zgoda
    http://jpa.berlios.de/ | http://www.zgodowie.org/
     
    Jarek Zgoda, Jan 13, 2005
    #15
  16. Simon Wittber

    Steve Holden Guest

    Peter Hansen wrote:

    > Paul Rubin wrote:
    >
    >> Simon Wittber <> writes:
    >>
    >>>> Is there a reason NOT to use them? If a classic class works fine, what
    >>>> incentive is there to switch to new style classes?
    >>>
    >>>
    >>> Perhaps classic classes will eventually disappear?

    >>
    >>
    >> It just means that the formerly "classic" syntax will define a
    >> new-style class. Try to write code that works either way.

    >
    >
    > Unfortunately, if we should follow the recent advice about
    > always using "super()" in the __init__ method, it's hard
    > to do what you suggest (though it sounds like good advice)
    > without resorting to extreme ugliness:
    >
    > >>> class Classic:

    > .... def __init__(self):
    > .... super(Classic, self).__init__()
    > ....
    > >>> c = Classic()

    > Traceback (most recent call last):
    > File "<stdin>", line 1, in ?
    > File "<stdin>", line 3, in __init__
    > TypeError: super() argument 1 must be type, not classobj
    >
    > Could classic classes ever be removed without us having manually
    > to fix all __init__ calls to the superclass?
    >

    That's not really an issue unless there's a diamond-shaped inheritance
    graph and linearisation of the the super classes is required to ensure
    that things stay sane. Remembering that the MO for classic classes and
    types are rather different, how many cases do you think it will matter?

    regards
    Steve
    --
    Steve Holden http://www.holdenweb.com/
    Python Web Programming http://pydish.holdenweb.com/
    Holden Web LLC +1 703 861 4237 +1 800 494 3119
     
    Steve Holden, Jan 14, 2005
    #16
  17. Simon Wittber

    Steve Holden Guest

    Michael Hobbs wrote:

    > Simon Wittber <> wrote:
    >
    >>I've noticed that a few ASPN cookbook recipes, which are recent
    >>additions, use classic classes.
    >>
    >>I've also noticed classic classes are used in many places in the
    >>standard library.
    >>
    >>I've been using new-style classes since Python 2.2, and am suprised
    >>people are still using the classic classes.
    >>
    >>Is there a legitimate use for classic classes that I am not aware of?
    >>Is there a project to specifically migrate standard library classes to
    >>new-style classes?

    >
    >
    > I'm guessing that the biggest contributor to the continued prevalence
    > of classic classes is the official Python Tutorial:
    > http://docs.python.org/tut/node11.html#SECTION0011300000000000000000
    >
    > I came into Python around the 2.2 timeframe and used the tutorial as
    > my starting point. I had often read people referring to "classic
    > classes" but assumed that it was some old pre-2.2 thing that I need
    > not worry about. For the longest time, I had assumed that I was using
    > new style classes because I created them exactly as prescribed in the
    > 2.2 tutorial (which still hasn't changed for 2.3 or 2.4).
    >
    > Now, classic classes are my habit and I see no compelling reason to
    > put in the effort to change my habits.
    >


    Since the only effort is the addition of

    __meta class__ = type

    at the head of your modules you could probably automate this without
    breaking too much code.

    regards
    Steve
    --
    Steve Holden http://www.holdenweb.com/
    Python Web Programming http://pydish.holdenweb.com/
    Holden Web LLC +1 703 861 4237 +1 800 494 3119
     
    Steve Holden, Jan 14, 2005
    #17
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mr. SweatyFinger
    Replies:
    2
    Views:
    2,072
    Smokey Grindel
    Dec 2, 2006
  2. Kenneth McDonald

    People still using Tkinter?

    Kenneth McDonald, May 10, 2008, in forum: Python
    Replies:
    11
    Views:
    576
    Kevin Walzer
    May 10, 2008
  3. Chuckk Hubbard

    Re: People still using Tkinter?

    Chuckk Hubbard, May 10, 2008, in forum: Python
    Replies:
    3
    Views:
    249
  4. Replies:
    1
    Views:
    735
    Roger Lindsjö
    Jun 11, 2008
  5. Lawand
    Replies:
    42
    Views:
    7,805
    sorin12345
    May 21, 2011
Loading...

Share This Page