考慮以下問題最小:方法對象從類轉換爲子類在Python
from math import sqrt
class Vector(object):
def __init__(self, x, y, z):
self.v = [x, y, z]
def normalize(self):
x, y, z = self.v
norm = sqrt(x**2 + y**2 + z**2)
self.v = [x/norm, y/norm, z/norm]
# other methods follow
class NormalizedVector(Vector):
def __init__(self, x, y, z):
super(Vector, self).__init__(x, y, z)
self.normalize()
所以基本上NormalizedVector對象是一樣的矢量對象,但與添加的正常化。
是否有可能向Vector添加一個方法,以便每當調用normalize方法時,該對象會自動分類到NormalizedVector?
我知道我可以使用abstract factory pattern,但這隻有在創建時創建子對象時纔有效:我希望能夠繼承先前已創建的對象。
我發現some solutions基於重新分配__類__方法,但不鼓勵這些方法。我願意修改上面的模式,使其更加「Pythonic」。
中找到可能的操作列表爲什麼不只使用具有布爾型「規範化」實例屬性的Vector類? –
我會做的,謝謝! –