当我更改属性并使其成为class-attribute时,我有一段代码被破坏了,我很想知道原因。
所以,我从
开始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.有人可以解释为什么会发生这种情况吗?最狡猾的做法是什么?
答案 0 :(得分:1)
你传递inter
作为self
参数的第一个参数。基本上,在"__main__"
代码中,您传递的内容如下:
interpSegment(inter, 0.2, 0.6, 0, 1, 0.4)
您应该将其称为:
Inter1DLineal.interpSegment(0.2, 0.6, 0, 1, 0.4)
但是,我还要说明,interpSegment
__init__
中{{1}}所处的位置或者作为一种方法本身就是更好的方法。