如何用另一个对象替换__init __()中的实例?

时间:2010-07-09 01:25:09

标签: python oop

我在ClassA中调用构造函数,并且如果满足某个条件,则希望结果对象具有不同的类(ClassB)。我已经尝试将第一个参数替换为__init __()(在下面的示例中为'self') __init __()中的但它似乎没有按照我想要的那样做。

在main中:

import ClassA

my_obj = ClassA.ClassA(500)
# unfortunately, my_obj is a ClassA, but I want a ClassB!
在ClassA / __ init __。py:

import ClassB

class ClassA:
    def __init__(self,theirnumber):
        if(theirnumber > 10):
            # all big numbers should be ClassB objects:
            self = ClassB.ClassB(theirnumber)
            return
        else:
            # numbers under 10 are ok in ClassA.
            return

在ClassB / __ init __。py:

class ClassB:
    pass

3 个答案:

答案 0 :(得分:32)

答案 1 :(得分:14)

我建议使用工厂模式。例如:

def get_my_inst(the_number):
   if the_number > 10:
       return ClassB(the_number)
   else:
       return ClassA(the_number)

class_b_inst = get_my_inst(500)
class_a_inst = get_my_inst(5)

答案 2 :(得分:12)

不要试图歪曲构造函数的目的:使用工厂函数。为一个类调用构造函数并返回一个不同类的实例是一种引起混淆的可靠方法。