Предположим, что у меня есть два класса:
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, эта реализация возможна?
Если вы хотите установить класс, используйте переменную __class__
.
class C(object):
def __init__(self, cond):
if cond ==True:
self.__class__ = A
else:
self.__class__ = B
self.__class__.__init__(self)
Поскольку вы не дали очень хорошего примера, почему это может быть полезно, я просто предполагаю, что вы не понимали ООП.
То, что вы пытаетесь сделать, может быть своего рода шаблоном factory:
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())
something_useful
полезное в C
и это решение для вставки.
Вы хотите сделать что-то вроде mix- в зависимости от значения cond?
Если да, попробуйте
class C(object):
def __init(self, cond):
if cond ==True:
self.__bases__ += A
else:
self.__bases__ += B
Я не уверен на 100%, что это возможно, потому что, возможно, оно работает только C. основы + = A. Если это невозможно, то то, что вы пытаетесь сделать, вероятно, невозможно. C должен либо наследовать от A, либо от B.
Пока я не буду так жесток, как Йохен, я скажу, что вы, вероятно, ошибаетесь. Даже если это возможно, вам намного лучше использовать множественное наследование и иметь 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()
C
не имеет отношения ни кA
ни кB
__init__
.