【发布时间】:2014-03-20 08:19:25
【问题描述】:
当我更改属性并将其设为类属性时,我有一段代码被破坏,我很想了解原因。
所以,我开始了
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 的方式是什么?
【问题讨论】:
-
为什么它需要在课堂上?它既不访问/影响类也不影响实例。
-
@Ignacio 当然你是对的,这只是一个玩具示例,用于展示我不理解的行为。
-
@JanneKarila 谢谢,我明白这正是我的问题的基础。