У меня есть два класса (назовите их Working and ReturnStatement), которые я не могу изменить, но я хочу расширить их оба с помощью журнала. Хитрость заключается в том, что рабочий метод возвращает объект ReturnStatement, поэтому новый объект MutantWorking также возвращает ReturnStatement, если я не могу применить его к MutantReturnStatement. Высказывание с помощью кода:
# these classes can't be changed
class ReturnStatement(object):
def act(self):
print "I'm a ReturnStatement."
class Working(object):
def do(self):
print "I am Working."
return ReturnStatement()
# these classes should wrap the original ones
class MutantReturnStatement(ReturnStatement):
def act(self):
print "I'm wrapping ReturnStatement."
return ReturnStatement().act()
class MutantWorking(Working):
def do(self):
print "I am wrapping Working."
# !!! this is not working, I'd need that casting working !!!
return (MutantReturnStatement) Working().do()
rs = MutantWorking().do() #I can use MutantWorking just like Working
print "--" # just to separate output
rs.act() #this must be MutantReturnState.act(), I need the overloaded method
Ожидаемый результат:
Работаю.
Я работаю.
-
Я обертываю ReturnStatement.
Я - ReturnStatement.
Можно ли решить проблему? Мне также интересно, если проблема может быть решена и на PHP. Если я не получу рабочее решение, я не могу принять ответ, поэтому, пожалуйста, напишите рабочий код, чтобы принять его.