让我们看一个简单的向量类:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
我们想要一个计算长度的方法。如果我们想在类中定义它会是什么样子?
def length(self):
return math.sqrt(self.x ** 2 + self.y ** 2)
当我们将其定义为全局方法/函数时,它应该是什么样子?
def length_global(vector):
return math.sqrt(vector.x ** 2 + vector.y ** 2)
所以整个结构保持不变。我怎么能利用这个?如果我们暂时假设我们没有length
为我们的类编写方法Vector
,我们可以这样做:
Vector.length_new = length_global
v = Vector(3, 4)
print(v.length_new()) # 5.0
这是有效的,因为 , 的第一个参数length_global
可以重新用作 中的self
参数length_new
。如果没有明确的self
.
另一种理解显式需求的方法self
是查看 Python 在哪里添加了一些语法糖。当你记住时,基本上,一个电话就像
v_instance.length()
内部转化为
Vector.length(v_instance)
很容易看出self
适合的地方。您实际上并没有在 Python 中编写实例方法。你写的是类方法,它必须将实例作为第一个参数。因此,您必须将实例参数明确放置在某处。