Paulo da Silva <[EMAIL PROTECTED]> wrote:
> I would like to implement something like this:
>
> class C1:
> def __init__(self,xxx):
> if ... :
> self.foo = foo
> self.bar = bar
> else:
> self=C1.load(xxx)
>
> def load(xxx):
> ...
> return instance_of_C1
> load=staticmethod(load)
>
> This does not seem correct. How can I do it?
Use __new__ for such purposes, not __init__. (You need to make C1
newstyle, e.g. inherit from object, to make special method __new__
work).
>From __new__ you can return whatever you wish. However, if you return
an instance of C1, it _will_ be passed to __init__; so, just make sure
__init__ doesn't redo the initialization if passed an
already-initialized self.
E.g.:
class C1(object):
def __new__(cls, xxx):
if xxx: return type.__new__(cls, xxx)
else: return C1.load(xxx)
@staticmethod
def load(xxx): return ...whatever...
def __init__(self, xxx):
if hasattr(self, 'foo'): return
self.foo = 'foo'
self.bar = 'bar'
Alex
--
http://mail.python.org/mailman/listinfo/python-list