On Sep 3, 12:09 pm, Scott <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list