У меня есть два класса (назовите их 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. Если я не получу рабочее решение, я не могу принять ответ, поэтому, пожалуйста, напишите рабочий код, чтобы принять его.
