Returning other instance from __init__ - I need help
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Sat Mar 17 05:53:18 EDT 2007
En Fri, 16 Mar 2007 22:05:05 -0300, Paulo da Silva
<psdasilvaX at esotericaX.ptX> escribió:
> When debugging, I found this is wrong!!!
> Would someone please clarify what do I have to return from
> __new__?
Try this. I used a classmethod for load, it may be easier to subclass.
class C(object):
def __new__(cls, filename=None, foo=None, bar=None):
if filename is not None:
return cls.load(filename)
inst = super(C, cls).__new__(cls)
inst.foo = foo
inst.bar = bar
return inst
@classmethod
def load(cls, filename):
inst = super(C, cls).__new__(cls)
inst.foo = "some foo loaded from "+filename
inst.bar = "some bar loaded from "+filename
return inst
class D(C):
@classmethod
def load(cls, filename):
inst = super(D, cls).__new__(cls)
inst.foo = "D foo loaded from "+filename
inst.bar = "D bar loaded from "+filename
return inst
c1 = C(foo=1, bar=2)
print "c1=", c1
print "c1.foo=", c1.foo
print "c1.bar=", c1.bar
c2 = C(filename="xxx.txt")
print "c2=", c2
print "c2.foo=", c2.foo
print "c2.bar=", c2.bar
d1 = D(foo=10, bar=20)
print "d1=", d1
print "d1.foo=", d1.foo
print "d1.bar=", d1.bar
d2 = D(filename="yyy.txt")
print "d2=", d2
print "d2.foo=", d2.foo
print "d2.bar=", d2.bar
--
Gabriel Genellina
More information about the Python-list
mailing list