【发布时间】:2016-08-15 14:07:15
【问题描述】:
我需要写一门涉及日期的课程。我应该重载 + 运算符以允许将天数添加到日期中。解释它是如何工作的:Date 对象以(年、月、日)的格式表示为 (2016, 4, 15)。向此添加整数 10 应该会产生 (2016, 4, 25)。 Date 类的值有 self.year、self.month、self.day。
我的问题是代码应该以Date + 10 和10 + Date 的形式工作。 Date - 1 也应该在添加负天数的意义上起作用。 Date(2016, 4, 25) - 1 返回Date(2016, 4, 24)。
我的代码以Date + 10 的形式完美运行,但不能以10 + D 或D - 1 的形式运行。
def __add__(self,value):
if type(self) != int and type(self) != Date or (type(value) != int and type(value) != Date):
raise TypeError
if type(self) == Date:
day = self.day
month = self.month
year = self.year
value = value
if type(value) != int:
raise TypeError
days_to_add = value
while days_to_add > 0:
day+=1
if day == Date.days_in(year,month):
month+=1
if month > 12:
day = 0
month = 1
year+=1
day = 0
days_to_add -=1
return(Date(year,month,day))
这些是我得到的错误
TypeError: unsupported operand type(s) for +: 'int' and 'Date'
TypeError: unsupported operand type(s) for -: 'Date' and 'int'
【问题讨论】:
-
你还需要实现
__radd__。 -
看看stackoverflow.com/a/36745772/5320906。减法是一个单独的操作,您需要实现
__sub__和__rsub__方法。 -
我明白了。因此,如果我的教授指示我“重载 + 运算符”,他就自动意味着要创建所有这些方法?或者换一种说法,重载是通过执行所有这些方法来定义的?
-
是的,一般“重载运算符”是指扩展或覆盖运算符的行为,例如 + 或 -。为此,您需要覆盖相关的特殊方法 - 参见我之前提到的答案。我们不能告诉你教授的意思,你需要问他们。
-
你的 Date 类是独立的,还是允许使用标准 datetime 模块中的东西?
标签: python class overloading