【发布时间】:2015-10-19 21:06:11
【问题描述】:
这在this thread 中有所提及,但从未解决。
我有一个向量类:
class Vector2D(object):
# ...
def __add__(self, other):
return Vector2D(self.x + other.x, self.y + other.y)
# ...
def __truediv__(self, scalar):
return Vector2D(self.x / scalar, self.y / scalar)
然后,我有一个类型提示接受 Vector2D 的函数:
def foo(vector):
"""
:type vector: Vector2D
"""
print("<{}, {}>".format(vector.x, vector.y))
如果我尝试像这样调用foo,我会收到一个奇怪的警告,说"Expected type 'Vector2D', got 'int' instead":
foo((Vector2D(1, 2) + Vector2D(2, 3)) / 2)
但是,我运行时它运行良好,并且当我显式使用Vector2d的方法时没有警告:
foo(Vector2D(1, 2).__add__(Vector2D(2, 3)).__truediv__(2))
请注意,我使用的是 Python 2.7,但我在所有模块的顶部都有 from __future__ import division, print_function。任何帮助或建议表示赞赏。
【问题讨论】:
标签: python python-2.7 operator-overloading pycharm