【练习9.2】创建类,能够通过'年-月-日’字符串创建实例,并检验年、月、日是否合法。
时间: 2024-02-03 10:04:11 浏览: 28
可以通过以下方式创建一个类来实现:
```python
class Date:
def __init__(self, date_str):
year, month, day = map(int, date_str.split('-'))
if self._is_valid_date(year, month, day):
self.year = year
self.month = month
self.day = day
else:
raise ValueError('Invalid date!')
def _is_valid_date(self, year, month, day):
if not (1900 <= year <= 9999):
return False
if not (1 <= month <= 12):
return False
if month in {1, 3, 5, 7, 8, 10, 12}:
if not (1 <= day <= 31):
return False
elif month in {4, 6, 9, 11}:
if not (1 <= day <= 30):
return False
else: # February
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
if not (1 <= day <= 29):
return False
else:
if not (1 <= day <= 28):
return False
return True
```
这个类包含一个 `_is_valid_date` 方法来检查日期是否合法。在初始化时,输入的日期字符串会被分割成年月日三个部分,并通过 `_is_valid_date` 方法进行验证。如果日期合法,就将其保存在实例的属性中。如果日期不合法,就抛出一个 `ValueError` 异常。可以通过以下方式使用这个类:
```python
d = Date('2022-02-30') # Raises ValueError: Invalid date!
d = Date('2022-02-28') # Creates a valid Date instance
print(d.year, d.month, d.day) # Output: 2022 2 28
```