return an object of a different class

Richard Thomas chardster at gmail.com
Wed Feb 16 06:05:32 CET 2011


On Feb 16, 2:23 am, s... at uce.gov 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)
>
> class SmallNumbers:
>    def __init__(self, n):
>      self.size = 'small'
>
> class BigNumbers:
>    def __init__(self, n):
>      self.size = 'big'
>
> t = MyNumbers(200)
>
> When I do type(t) it says MyNumbers, while I'd want it to be BigNumbers,
> because BigNumbers and SmallNumbers will have different methods etc...
>
> Do I need to use metaclasses?
>
> Thanks.
> --
> Yves.                                                  http://www.SollerS.ca/
>                                                        http://blog.zioup.org/

If you don't want to use a factory function I believe you can do this:

class MyNumber(object):
    def __new__(cls, n):
        if n <= 100:
            cls = SmallNumbers
        else:
            cls = BigNumbers
        return object.__new__(cls, n)
    ...

Chard.



More information about the Python-list mailing list