【问题标题】:How do I overload `float()` for a custom class?如何为自定义类重载`float()`?
【发布时间】:2012-04-19 12:25:03
【问题描述】:

如何实现重载float() 的方法,即当我编写的类的实例传递给float() 时调用它?

我开始编写自己的Fraction 类:

class Fraction:
    def __init__(self, num = 0, denom = 1):
        self.num = float(num)
        self.denom = float(denom)

现在我希望能够做到这一点:

float(Fraction())

我尝试使用下面的方法,但没有奏效。

def float(self):
    return self.num / self.denom

【问题讨论】:

  • @DavidHeffernan 你能帮我个忙吗?我的问题是:stackoverflow.com/questions/9938329/… 因含糊不清而被关闭。我对其进行了编辑,现在对于 SO 来说,这似乎是一个完全合法的问题。
  • 问题是,我的帐户因此被自动禁止,我不能再问任何问题了,所以如果您认为我的问题足够好,请给它投票吗?
  • @DavidHeffernan ???至少回复说“是”或“否”?
  • 是的,+1,在我看来是一个公平的 Q
  • @DavidHeffernan 非常感谢。如果它不会太多,您是否也可以标记问题以引起主持人的注意,以便可以重新打开它? (显然,该特权也被剥夺了:

标签: python floating-point operator-overloading overloading


【解决方案1】:

在你的类上定义 __float__() 特殊方法。

class MyClass(object):
    def __float__(self):
         return 0.0

float(MyClass())   # 0.0

注意这个方法必须返回一个float!假设两个操作数都是整数,则计算 self.num / self.denom 在 Python 3.0 之前的版本中默认返回 int。在这种情况下,您只需确保其中一个操作数是浮点数:例如 float(self.num) / self.denom

【讨论】:

  • am在我的代码中为self.numself.denom 使用整数。 10 倍的答案。
  • 如果不返回浮点数会发生什么
  • 你得到一个TypeError 异常。
  • @YatharthROCK:基本上,您将在您的 python 解释器中创建一个不稳定的黑洞,宇宙将被摧毁。我认为kindall只是指出/
  • @kindall:那么当你调用其中一个特殊方法时,它不只是执行重载的方法,它仍然通过特殊方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多