当我更改属性并将其设为类属性时,我有一段代码被破坏,我很想了解原因。
所以,我从
def linInterp(x1, x2, y1, y2, x):
return y1 + (x - x1) * (y2 - y1) / (x2 - x1)
class Inter1DLineal(object):
def __init__(self):
self.interpSegment = linInterp
if __name__ == "__main__":
inter = Inter1DLineal()
print(inter.interpSegment(0.2, 0.6, 0, 1, 0.4))
没问题。我知道我可以在 中实现interpSegment
为适当的方法Inter1DLineal
,例如
@classmethod
def interpSegment(cls, *args, **kwargs):
return linInterp(*args, **kwargs)
但我认为我对类型函数的属性很好。
让我吃惊的是接下来发生的事情。我决定,因为interpSegment
对所有实例都是通用的,所以我应该将其设为类属性。
def linInterp(x1, x2, y1, y2, x):
return y1 + (x - x1) * (y2 - y1) / (x2 - x1)
class Inter1DLineal(object):
interpSegment = linInterp
def __init__(self):
pass
if __name__ == "__main__":
inter = Inter1DLineal()
print(inter.interpSegment(0.2, 0.6, 0, 1, 0.4))
但这破坏了代码。似乎调用interpSegment
现在传递了 6 个属性,而不是 5 个。有人可以解释为什么会发生这种情况吗?这样做的最Python主义的方式是什么?