return an object of a different class

Karim karim.liateni at free.fr
Wed Feb 16 04:04:46 EST 2011


On 02/16/2011 06:05 AM, Richard Thomas wrote:
> 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.

Very beautiful code great alternative to factory method!
To memorize this pythonic way.

Regards
Karim



More information about the Python-list mailing list