如何为自定义类重载`float()`?
Posted
技术标签:
【中文标题】如何为自定义类重载`float()`?【英文标题】:How do I overload `float()` for a custom class? 【发布时间】: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 你能帮我个忙吗?我的问题是:***.com/questions/9938329/… 因含糊不清而被关闭。我对其进行了编辑,现在对于 SO 来说,这似乎是一个完全合法的问题。 问题是,我的帐户因此被自动禁止,我不能再问任何问题了,所以如果您认为我的问题足够好,请给它投票吗? @DavidHeffernan ???至少回复说“是”或“否”? 是的,+1,在我看来是一个公平的 Q @DavidHeffernan 非常感谢。如果它不会太多,您是否也可以标记问题以引起主持人的注意,以便可以重新打开它? (显然,该特权也被剥夺了: 【参考方案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.num
和self.denom
使用整数。 10 倍的答案。
如果不返回浮点数会发生什么?
你得到一个TypeError
异常。
@YatharthROCK:基本上,您将在您的 python 解释器中创建一个不稳定的黑洞,宇宙将被摧毁。我认为kindall只是指出/
在
@kindall:那么当你调用其中一个特殊方法时,它不只是执行重载的方法,它仍然通过特殊方法?以上是关于如何为自定义类重载`float()`?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 UIPageViewController Delegate 制作自定义类?