当我在除法中使用一个方法时,为什么它算作一个方法而不是返回值类型(在这种情况下是一个整数)?

时间:2015-11-02 01:51:28

标签: python

我有一个家庭作业来制作时间课程。我们必须重载加法运算符,并在设置时,我使用类“total_minutes”方法,该方法返回当时的总分钟数。我试图将它除以60得到小时(和%60分钟),但我得到一个错误“TypeError:不支持的操作数类型为/:'方法'和'int'”我打字的方式就是这样:

total = self.total_minutes
new_hr = total/60

我不明白为什么总计是一种方法。如果self.total_minutes返回一个整数,那么不应该总是self.total_minutes(一个整数)返回的值?我将发布整个代码,也许还有其他我缺少的东西,但我认为这是我需要输入不同内容的区域,因为total_minutes方法可以独立工作。

class Time:
    def __init__(self, init_hr = 12, init_min = 0, init_ampm = "AM"):
        if init_hr < 1 or init_hr > 12:
            raise Exception("Error: Invalid hour for Time object")
        if init_min < 0 or init_min > 59:
            raise Exception("Error: Invalid minute for Time object")
        init_ampm = init_ampm.upper()
        if init_ampm != "AM" and init_ampm != "PM":
            raise Exception("Error: Invalid am/pm flag for Time object")

        self.hr = init_hr
        self.min = init_min
        self.ampm = init_ampm

    # IMPLEMENT THE REMAINING METHODS OF THE Time CLASS BELOW!!
    def hour(self):
        return self.hr
    def minute(self):
        return self.min
    def am_pm(self):
        return self.ampm
    def total_minutes(self):
        if self.ampm == "AM" and self.hr <= 11:
            return (self.hr*60 + self.min)
        elif self.ampm == "AM" and self.hr == 12:
            return self.min
        elif self.ampm == "PM" and self.hr <= 11:
            return (self.hr*60 + self.min + 720)
        else:
            return (int(self.hr*60 + self.min))
    def __str__(self):
        return ("%d:%02d%s"%(self.hr, self.min, self.ampm))
    def __repr__(self):
        return str(self)
    def __add__(self, mins):
        total = self.total_minutes
        new_hr = total/60
        if new_hr > 12:
            new_ampm = "PM"
            new_hr == new_hr - 12
        else:
            new_ampm = "AM"
        new_min = total%60

        return Time(new_hr, new_min, new_ampm)

3 个答案:

答案 0 :(得分:2)

你在这里设置总EQUAL到方法而不是实际调用方法。要调用方法,请执行self.total_minutes()

答案 1 :(得分:2)

total_minutes是一种方法,因为这就是你定义它的方式。要运行方法并获取其返回值,必须调用它:

total = self.total_minutes()

括号使它被调用,给出返回值,这可能是一个整数。

答案 2 :(得分:1)

您需要使用total = self.total_minutes()而不是目前拥有的内容。您当前拥有的内容在this对象中查找变量或方法。如果您致电self.total_minutes(),它会执行total_minutes()函数并将该返回值分配给total变量。如果没有括号,则设置总数等于方法本身,而不是方法返回的值。无论何时调用函数,即使未在括号中传递任何参数,也必须使用括号。