如果您只是添加行为,而不依赖于其他实例值,则可以分配给该对象的
__class__:
from math import piclass Circle(object): def __init__(self, radius): self.radius = radius def area(self): return pi * self.radius**2class CirclePlus(Circle): def diameter(self): return self.radius*2 def circumference(self): return self.radius*2*pic = Circle(10)print c.radiusprint c.area()print repr(c)c.__class__ = CirclePlusprint c.diameter()print c.circumference()print repr(c)
印刷品:
10314.159265359<__main__.Circle object at 0x00A0E270>2062.8318530718<__main__.CirclePlus object at 0x00A0E270>
这与在Python中获得的“转换”非常接近,并且与在C中进行强制转换一样,在不考虑此事的情况下也不应该这样做。我已经发布了一个相当有限的示例,但是如果您可以保持约束(仅添加行为,没有新的实例变量),那么这可能有助于解决您的问题。



