我需要扩展Networkx python包,并Graph为我的特殊需求向类添加一些方法
Graph
我想到的方法是简单地派生一个新的类say NewGraph,并添加所需的方法。
NewGraph
但是,networkx中还有其他几个函数可以创建和返回Graph对象(例如,生成随机图)。现在,我需要将这些Graph对象转换为NewGraph对象,以便可以使用新方法。
最好的方法是什么?还是我应该以完全不同的方式解决问题?
如果您只是添加行为,而不依赖于其他实例值,则可以分配给该对象的__class__:
__class__
from math import pi class Circle(object): def __init__(self, radius): self.radius = radius def area(self): return pi * self.radius**2 class CirclePlus(Circle): def diameter(self): return self.radius*2 def circumference(self): return self.radius*2*pi c = Circle(10) print c.radius print c.area() print repr(c) c.__class__ = CirclePlus print c.diameter() print c.circumference() print repr(c)
印刷品:
10 314.159265359 <__main__.Circle object at 0x00A0E270> 20 62.8318530718 <__main__.CirclePlus object at 0x00A0E270>
这与在Python中获得的“转换”非常接近,并且与在C中进行强制转换一样,在不考虑此事的情况下也不应该这样做。我已经发布了一个相当有限的示例,但是如果您可以保持约束(仅添加行为,没有新的实例变量),那么这可能有助于解决您的问题。