By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,387 Members | 1,729 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,387 IT Pros & Developers. It's quick & easy.

new style classes, __new__, __init__

P: n/a
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.

Sep 16 '08 #1
Share this Question
Share on Google+
3 Replies


P: n/a
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
Sep 16 '08 #2

P: n/a
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.

Sep 16 '08 #3

P: n/a
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

Sep 16 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.