增加两个没有模块的类的属性?

时间:2016-09-07 15:30:49

标签: python class attributes

如何在不导入其他模块的情况下创建一个可以像这样运行的类?

>>date(2014,2,2) + delta(month=3)
>>(2014, 5, 2)
>>
>>date(2014, 2, 2) + delta(day=3)
>>(2014, 2, 5)
>>date(2014, 2, 2) + delta(year=1, month=2)
>>(2015, 4, 2)

这是我的代码:

# class delta(date):
#     year = date(year)
#     def __init__(self,y,m,d):
#         self.y = y + year
#         self.m = m
#         self.d = d
#     def __call__(self):
#         return self.y, self.m, self.d
class date(object):
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day
    def __call__(self):
        return self.year, self.month, self.day

1 个答案:

答案 0 :(得分:1)

覆盖__add__方法。在delta类中,给出__init__默认参数,这样您就可以只使用一个或两个参数调用它。

class delta():
    def __init__(self,year=0,month=0,day=0):
        self.y = year
        self.m = month
        self.d = day
    def __call__(self):
        return self.y, self.m, self.d

class date():
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day   
    def __call__(self):
        return self.year, self.month, self.day
    def isLeapYear (self):
        if ((self.year % 4 == 0) and (self.year % 100 != 0)) or (self.year % 400 == 0):
            return True
        return False
    def __add__(self,delta):
        self.year=self.year+delta.y
        self.month=self.month+delta.m
        if self.month>12:
            self.month=self.month%12
            self.year+=1
        self.day=self.day+delta.d
        if self.isLeapYear() and self.day>29:
            self.day=self.day%29
            self.month+=1
        elif not self.isLeapYear() and self.day>28:
            self.day=self.day%28
            self.month+=1
        return self.year, self.month, self.day

print(date(2014, 2, 2) + delta(year=1, month=2)) # (2015, 4, 2)

birthdate=date(1990,1,1)
currentyear=birthdate+delta(year=20,month=2,day=5)
print(currentyear) # (2010, 3, 6)