如何为Python类创建一个add方法?

时间:2015-11-22 01:33:40

标签: python

class FootMeasure(object):
    def __init__(self, feet=0, inches=0):
        """Initiates feet and inches to 0. User can enter custom numbers"""
        self.__feet = feet
        self.__inches = inches
    def __repr__(self):
        """Returns inches higher than 11 to a foot representation
           Returns 60 inches at 5 ft instead of 5 ft 0 inches
           Returns 0 as 0 ft 0 inches
        """
        if self.__inches == 0:
            return str(self.__feet) + ' ft '
        elif self.__inches > 11:
           feet = int(self.__inches / 12)
           remainder = self.__inches % 12
           return str(feet) + ' ft ' + str(remainder) + ' in '
        else: 
            return str(self.__feet) + ' ft. ' + str(self.__inches) + ' in. '
    def __add__(self):
        """Returns two FootMeasures added together"""

我是班级的新手,所以我对如何做到这一点感到困惑。我知道这可能是一个简单的过程,但我只是在寻找添加分数的例子而且无法弄清楚。那么,我该如何为此创建一个add方法呢?例如,如果我说第一个= FootMeasure(1,1),第二个= FootMeasure(1,1)。然后结果=第一个+第二个。我当然想要2英尺2英寸的结果。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

__add__方法应该有两个参数:一个用于对象本身,另一个用于另一个。然后将适当的值一起添加到return结果中。

但是,我建议您重构代码以将FootMeasure对象存储为单个英寸数。然后,您可以更轻松地进行计算。这类似于处理货币计算的方式,其值由最小面额的单个整数表示(例如$ 3.50将表示为350美分)。

此外,对象的__repr__应该允许您以eval()可以处理的方式重现对象。您可以使用内置的divmod()生成商和余数,然后将其解压缩为格式字符串。

最后,这个类可以很好地处理格式很好的字符串的其他方法(__str__,你在__repr__中的内容),对象的脚,对象的英寸(英寸以下) 12考虑到英尺,而不是总英寸,因为它已经是inches),依此类推。

class FootMeasure(object):
    def __init__(self, feet=0, inches=0):
        """Initiates feet and inches to 0. User can enter custom numbers"""
        self.inches = feet*12 + inches
    def __repr__(self):
        """Returns the string representation of the object, in feet and inches
        """
        return 'FootMeasure({}, {})'.format(*divmod(self.inches, 12))
    def __add__(self, other):
        """Returns two FootMeasures added together"""
        return FootMeasure(inches=self.inches + other.inches)

答案 1 :(得分:0)

您需要两个参数:

def __add__(self, other):

答案 2 :(得分:0)

您需要两个参数selfother。然后,对于每个新属性,您只需将selfother的属性添加到一起。使用这些新值创建并返回一个新的FootMeasure对象,然后你就完成了设置!

def __add__(self, other):
    """Returns two FootMeasures added together"""
    return FootMeasure(self.__feet + other.__feet,
                       self.__inches + other.__inches)