使对象返回浮点值python

时间:2014-12-06 00:12:54

标签: python object get

我想不出任何其他语言类似的东西,但希望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>

请帮忙! 感谢

3 个答案:

答案 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)

@Daniel Reis:非常感谢您的回答,但这绝对不是我的问题。我的问题是从来没有在任何地方返回错误的数字,但是引用该对象给了我一个对象(通常是想要的)而不是浮点数(就像我想要的那样),但是通过定义两个方法:

def __repr__(self):
    return str(float(self.attr1/self.attr2))

def __str__(self):
    return str(float(self.attr1/self.attr2))

我得到了我想要的东西(见原帖帖子评论!