class FastCar(Car):
def __init__(self, color, max_speed=100):
Car.__init__(self, color)
self.max_speed = max_speed
def drive_fast(self):
print "Driving at %s mph" %self.max_speed
@staticmethod
def fromOtherCar(car):
return FastCar(car.color)
actually_fast = FastCar.fromOtherCar(thought_was_classic)
Это стандартный способ.
В зависимости от макета реального класса, вы можете сделать что-то вроде:
classic = Car('blue')
classic.__class__ = FastCar
classic.__dict__.update(FastCar(classic.color).__dict__)
classic.drive_fast()
Но я бы не советовал - это хак, он не всегда работает, а другой способ чище.
Редактировать: Собирался добавить в основном то, что говорится в комментарии @ PaulMcGuire. Следуйте этому совету, он прав.