重载方法的参数问题

titainium 2005-03-11 10:52:36
def __add__(self, other):
"""Overload addition operator"""

return Rational(self.sign * self.numerator * other.denominator +
other.sign * other.numerator * self.denominator,
self.denominator * other.denominator)

def __sub__(self, other):
"""Overload subtraction operator"""

return self + (-other)

def __mul__(self, ohter):
"""Overload multiplication operator"""

return Rational(self.numerator * ohter.numerator,
self.sign * self.denominator * ohter.sign *
ohter.denominator)

def __div__(self, ohter):
"""Overload / division operator"""

return Rational(self.numerator * ohter.denominator,
self.sign * self.denominator * ohter.sign *
ohter.numerator)

def __truediv__(self, other):
"""Overload / division operator"""

return self.__div__(other)

def __eq__(self, other):
"""Overload equality operator"""

return (self - other).numerator == 0

def __lt__(self, other):
"""Overload less-than operator"""

return (self - other).sign < 0

def __gt__(self, other):
"""Overload greater-than operator"""

return (self - other).sign > 0

def __le__(self, other):
"""Overload less-than or equal-to operator"""

return (self < other) or (self == other)

def __ge__(self, other):
"""Overload greater-than or equal-to operator"""

return (self > other) or (self == other)

def __ne__(self, other):
"""Overload inequality operator"""

return not (self == other)

def __abs__(self):
"""Overload built-in function abs"""

return Rational(self.numerator, self.denominator)

def __str__(self):
"""String representation"""

if self.sign == -1:
signString = "-"
else:
signString = ""

if self.numerator == 0:
return "0"
elif self.denominator == 1:
return "%s%d" % (signString, self.numerator)
else:
return "%s%d/%d" % (signString, self.numerator, self.denominator)

def __int__(self):
"""Overload integer representation"""

return self.sign * divmod(self.numerator, self.denominator)[0]

def __float__(self):
"""Overload floating-point representation"""

return self.sign * float(self.numerator) / self.denominator

def __coerce__(self, other):
"""Overload coercion. Can only coerce int to Rational"""

if type(other) == type(1):
return (self, Rational(other))
else:
return None

编译不通过,说是找不到other,请问怎么办?谢谢!
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
titainium 2005-03-14
  • 打赏
  • 举报
回复
多谢xyzxyz1111(如是我闻),果然是这个问题。
titainium 2005-03-13
  • 打赏
  • 举报
回复
嘿嘿,我没注意,试试再说,多谢了!
xyzxyz1111 2005-03-13
  • 打赏
  • 举报
回复
我是说你的other是不是敲错了?变成ohter
xyzxyz1111 2005-03-12
  • 打赏
  • 举报
回复
def __mul__(self, ohter):
def __div__(self, ohter):

???
titainium 2005-03-12
  • 打赏
  • 举报
回复
这是《python编程金典》上的一个例子,源码清单可以看P146-148,这两个参数都是指相同自定义类型类型的两个参数,就像C++里面的运算符重载。也就是说,self是对对象自身的引用,other是对同类型的另一个对象的引用。可是为什么编译的时候找不到other?
titainium 2005-03-11
  • 打赏
  • 举报
回复
这原本是一个自定义的类,重载了几个方法,前面一点东东被我删掉了,要不然这里不让我发帖,真是见鬼,不过基本无关大局,错误主要是找不到那个other。比如就像def __ne__(self, other)。说是全局范围内没有other这个变量。请问各位高手,应该怎么做。

37,722

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧