On Sep 3, 12:09*pm, Scott <smba...@gmail.com> wrote:
> Let's say I have an object:
>
> class foo():
> * *def create_another()
> * * * *return foo()
>
> * *def blah():
> * * * *x = self.create_another()
> * * * *... do something with X
>
> Now I create a inherited class of this object:
>
> class bar(foo):
> * * ...
>
> If I call bar.create_another(), it will return a foo() instead of a
> bar(). This isn't what I want. I would like bar.create_another() to
> create an instance for bar(). Obviously I can do this by overriding
> create_another, i.e.
>
> class bar(foo):
> * * def create_another()
> * * * * return bar()
>
> However, is there a way for me to modify foo() so that it
> automatically creates objects of the derived class, so that I don't
> have to continue to redefine create_another() ?
>
> For example, I tried the following:
>
> def create_another()
> * * return self.type()()
>
> but it did not work.
>
> Thanks,
> Scott
This works:
>>> class C(object):
.... @classmethod
.... def create_another(cls):
.... return cls()
....
>>> class D(C):
.... pass
....
>>> d = D()
>>> e = d.create_another()
>>> isinstance(e, D)
True
Matt
|