我想不出任何其他语言类似的东西,但希望python可以做这样的事情......
我需要的是以下内容:
当引用对象的值时,我需要该对象返回一个浮点数。例如:
b = AnyObject(3, 4)
print(b) #Should output 0.75
我已经尝试了以下内容:
def __get__(self, instance, owner):
return float(self.param1/self.param2)
但这不起作用。当像这样打印b时,我只得到对象的引用:
<(...) object at 0x10fa77e10>
请帮忙! 感谢
答案 0 :(得分:3)
您正在查看<Fraction object at 0xdeadbeef>
,因为__str__
类的object
方法在您的Python实现中返回:类名和地址。要使print
正常工作,您需要使用自己的代码覆盖__str__
方法,以替换从object
继承的方法。在您了解情况时,您可以通过实施float(obj)
方法让__float__
工作。
from __future__ import division
class Fraction(object):
def __init__(self, num, den):
self.num, self.den = num, den
# the built-in function float(obj) calls obj.__float__()
def __float__(self):
"""float(self): Return a float approximating the fraction."""
return self.num / self.den
# Python 2.6/2.7/3.x print() function and Python 2 print statement
# call str(obj), which calls obj.__str__()
def __str__(self):
"""str(self): Return a string representing the fraction."""
return str(float(self))
答案 1 :(得分:0)
你的问题是整数除法也是一个整数:
>>> 3 / 4
0
你需要将对象浮点数作为参数,或者在分割之前将整数参数强制转换为浮点数:
>>> 3.0 / 4.0
0.75
>>> float(3) / float(4)
0.75
答案 2 :(得分:0)
def __repr__(self):
return str(float(self.attr1/self.attr2))
def __str__(self):
return str(float(self.attr1/self.attr2))
我得到了我想要的东西(见原帖帖子评论!