return an object of a different class

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Feb 16 08:20:39 EST 2011


On Tue, 15 Feb 2011 19:23:39 -0700, spam wrote:

> How can I do something like this in python:
> 
> #!/usr/bin/python3.1
> 
> class MyNumbers:
>    def __init__(self, n):
>      self.original_value = n
>      if n <= 100:
>        self = SmallNumers(self)
>      else:
>        self = BigNumbers(self)

(1) self is just a local variable, it isn't privileged in any way. 
Assigning to the name "self" doesn't magically change the instance, so 
that can't work.

(2) By the time the __init__ method is called, the instance has been 
created. __init__ is the initializer, you need the constructor. Something 
like this:


# Untested.
class MyNumbers:
    def __new__(cls, n):
        if n <= 100:
            instance = SmallNumbers(n)
        else:
            instance = BigNumbers(n)
        return instance



-- 
Steven



More information about the Python-list mailing list