编写一个日期类MyDate,拥有年月日的数据,定义Mydate的__init-函数实现对象的初始化,在数据不合理时抛出异常
时间: 2024-02-01 22:16:40 浏览: 78
编写类MyDate
以下是一个简单的 MyDate 类的实现,可以满足你的需求:
```python
class MyDate:
def __init__(self, year, month, day):
if not self._check_date(year, month, day):
raise ValueError("Invalid date!")
self.year = year
self.month = month
self.day = day
def _check_date(self, year, month, day):
if not isinstance(year, int) or year < 1:
return False
if not isinstance(month, int) or month < 1 or month > 12:
return False
if not isinstance(day, int) or day < 1 or day > self._days_in_month(year, month):
return False
return True
def _days_in_month(self, year, month):
if month in {1, 3, 5, 7, 8, 10, 12}:
return 31
elif month in {4, 6, 9, 11}:
return 30
elif month == 2:
if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
return 29
else:
return 28
else:
return None
```
在初始化 MyDate 对象时,会先调用 `_check_date` 方法检查传入的年月日是否合法,如果不合法则抛出 `ValueError` 异常。
`_check_date` 方法会检查年月日是否为整数,年份是否大于等于 1,月份是否在 1 到 12 之间,日数是否在该月的合法范围内。如果所有条件都满足,则返回 True,否则返回 False。
`_days_in_month` 方法会根据年份和月份计算该月的天数,注意考虑闰年的情况。如果月份不在 1 到 12 之间,则返回 None。
你可以这样使用 MyDate 类:
```python
try:
d = MyDate(2021, 2, 29)
except ValueError as e:
print(e)
else:
print(d.year, d.month, d.day)
```
这段代码会尝试创建一个 MyDate 对象,但由于 2021 年 2 月没有 29 日,所以会抛出异常并打印错误信息。如果日期合法,则会打印年月日信息。
阅读全文