Как привести объект в Python

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

Ответы на вопрос(4)

Ваш ответ на вопрос