FAQ
Hi,

i have some questions related to new style classes, they look
quite useful but i wonder if somebody can give me an example
on constructors using __new__ and on using __init__ ?

I just see that when using it i can't give parameters to __new__
and when i additionally define __init__ then __new__ is not
called.

So i can use __new__ only for classes whose constructors don't
have parameters?


class C2:
def __new__(self):
print "new called"
self.a = 8

def __init__(self, a):
print "init called"
self.a = a

def fct(self):
print self.a


a = C2(7)
a.fct()


This way __new__ is not called, if i remove __init__ then
there are too many parameters to __new__, if i add a parameter
to __new__ then it says that __new__ does not take arguments.


Thanks for any hints,
Torsten.

Search Discussions

  • Larry Bates at Sep 16, 2008 at 7:18 pm

    Torsten Mohr wrote:
    Hi,

    i have some questions related to new style classes, they look
    quite useful but i wonder if somebody can give me an example
    on constructors using __new__ and on using __init__ ?

    I just see that when using it i can't give parameters to __new__
    and when i additionally define __init__ then __new__ is not
    called.

    So i can use __new__ only for classes whose constructors don't
    have parameters?


    class C2:
    def __new__(self):
    print "new called"
    self.a = 8

    def __init__(self, a):
    print "init called"
    self.a = a

    def fct(self):
    print self.a


    a = C2(7)
    a.fct()


    This way __new__ is not called, if i remove __init__ then
    there are too many parameters to __new__, if i add a parameter
    to __new__ then it says that __new__ does not take arguments.


    Thanks for any hints,
    Torsten.
    New style classes should be based on object:

    class C2(object):

    -Larry
  • Torsten Mohr at Sep 16, 2008 at 7:21 pm
    Hello,
    This way __new__ is not called, if i remove __init__ then
    there are too many parameters to __new__, if i add a parameter
    to __new__ then it says that __new__ does not take arguments.
    I just found an article that describes it better, this example works:

    class C2(object):
    def __new__(cls, a):
    obj = object.__new__(cls)
    print "new called"
    obj.a = 8

    return obj

    __new__ = staticmethod(__new__)


    def __init__(self, a):
    print "init called"
    self.a = a

    def fct(self):
    print self.a


    a = C2(7)
    a.fct()


    Best regards,
    Torsten.
  • Christian Heimes at Sep 16, 2008 at 7:40 pm

    Torsten Mohr wrote:
    I just found an article that describes it better, this example works:

    class C2(object):
    def __new__(cls, a):
    obj = object.__new__(cls)
    print "new called"
    obj.a = 8

    return obj

    __new__ = staticmethod(__new__)
    Staticmethod isnt' required here.


    Christian

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedSep 16, '08 at 7:12p
activeSep 16, '08 at 7:40p
posts4
users3
websitepython.org

People

Translate

site design / logo © 2022 Grokbase