1

假设我有两个类:

class A():
    pass

class B():
    pass

我还有一堂课

class C(object):
    def __init__(self, cond):
        if cond ==True:
           # class C initialize with class A
        else:
           # class C initialize with class B

如果我从 A 或 B 继承,通过这种实现是否可能?

4

4 回答 4

4

如果要设置类,请使用该__class__变量。

class C(object):
    def __init__(self, cond):
        if cond ==True:
           self.__class__ = A
        else:
           self.__class__ = B
        self.__class__.__init__(self)
于 2011-06-03T16:32:03.007 回答
3

既然你没有给出一个很好的例子,为什么这会很有用,我就假设你不了解 OOP。

您尝试做的可能是某种工厂模式:

def something_useful(cond):
    if cond:
        return A()
    else:
        return B()

myobj = something_useful(cond)

或者你可能想要聚合:

class C(object):
    def __init__(self, something_useful):
        # store something_useful because you want to use it later
        self.something = something_useful

# let C use either A or B - then A and B really should inherit from a common base
if cond:
    myobj = C(A())
else:
    myobj = C(B())
于 2011-06-03T16:34:45.397 回答
1

您的意思是您想根据 cond 的值进行某种混合吗?

如果是这样试试

class C(object):
    def __init(self, cond):
        if cond ==True:
           self.__bases__ += A
        else:
           self.__bases__ += B

我不是 100% 确定这是可能的,因为它可能只适用于 C. bases += A。如果不可能,那么您尝试做的可能是不可能的。C 应该从 A 或 B 继承。

于 2011-06-03T16:29:07.560 回答
1

虽然我不会像 Jochen 那样严厉,但我会说你可能采取了错误的方法。即使有可能,最好还是使用多重继承并拥有一个 AC 和一个 BC 类。

例如:

class A():
    pass

class B():
    pass

class C():
    #do something unique which makes this a C
    pass

#I believe that this works as is?
class AC(A,C):
    pass

class BC(B,C):
    pass

这样,您可以简单地调用

def get_a_c(cond):
    if cond == True:
       return AC()
    return BC()
于 2011-06-03T16:43:54.253 回答