1

2つのクラスがあるとします。

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

おそらくC.bases + = Aでしか機能しないため、これが可能かどうかは100%わかりません。不可能な場合は、実行しようとしていることはおそらく不可能です。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 に答える