Witam wszystkich
Problem polega na tym, że mamy w pewnym module C.py klasę C która dziedziczy z klasy X.
Sęk w tym, że klasa X importowana z innego modułu tutaj ABX.py powinna w zależności od parametrów inicjalizacyjnych klasy C
niejako przekazać do klasy C nie samą siebie ale inną klasę. I tak gdy parametr typ przekazywany do klasy C jest "A"
to klasa pośrednicząca X powinna transformować się w klasę A, a gdy parametr jest "B" to klasa X powinna transformować się w B.
Ważne jest tutaj aby instancja klasy C w zależności od przekazanego parametru, który decyduje jaka klasa będzie dziedziczona
zachowała wszystkie swoje właściwości czyli właściwości klasy C jaki właściwości klasy z której będzie dziedziczyć warunkowo czyli klasy A lub B.
A klasa X ma się po prostu rozpłynąć kończąc swoje zadanie :)
Reasumując nie wiem jak napisać kod klasy X aby spełnione były warunki na końcu modułu C.py
To co jest zamieszczone poniżej to tylko nieudana próba osiągnięcia tego.
Chyba że macie jakiś inny pomysł.
## moduł ABX.py
# możemy modyfikować dowolnie kod klasy A,B,X, jak i ten moduł.
class A(object): pass
class B(object): pass
class X(object):
def __init__(self, typ):
if typ == "A":
# Tutaj przykładowy kod, który w miejsce klasy X wstawia klase A
self.__class__ = A
elif typ == "B":
# Tutaj przykładowy kod, który w miejsce klasy X wstawia klase B
self.__class__ = B
## moduł C.py
from ABC import X
# Tej klasy nie wolno ruszać, ani zasadnizco tego modułu
class C(X):pass
c = C("A") # mają być spełnione poniższe warunki
print isinstance(c, C) #True instancja musi dziedziczyć po klasie C
print isinstance(c, X) #False
print isinstance(c, A) #True instancja musi dziedziczyć w tym wypadku również po klasie A
print isinstance(c, B) #False
c = C("B")
print isinstance(c, C) #True instancja musi dziedziczyć po klasie C
print isinstance(c, X) #False
print isinstance(c, A) #False
print isinstance(c, B) #True instancja musi dziedziczyć w tym wypadku również po klasie B