.编程实现如下功能: 为 (1)编写3个函数,分别求三角形、矩形和圆形周长。 (2)使用装饰器对上述3个函数的传入参数进行调用和合法性检查。
时间: 2024-10-27 12:07:24 浏览: 69
在Python中,你可以通过定义三个基本的形状类(如Triangle, Rectangle和Circle),然后各自计算它们的周长。接着,为了添加输入参数的检查,我们可以使用装饰器(Decorator)来封装这一步操作。
首先,我们创建基础形状类:
```python
class Shape:
def __init__(self):
pass
def perimeter(self):
pass
# 定义每个形状的类
class Triangle(Shape):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def perimeter(self):
return sum(self.side_lengths)
class Rectangle(Shape):
def __init__(self, length, width):
self.length = length
self.width = width
def perimeter(self):
return 2 * (self.length + self.width)
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def perimeter(self):
return 2 * math.pi * self.radius
```
接下来,我们将使用装饰器来检查参数的合法性:
```python
import math
from functools import wraps
def check_input(func):
@wraps(func)
def wrapper(*args, **kwargs):
if len(args) != func.__code__.co_argcount:
raise ValueError("Invalid number of arguments")
for arg in args:
if not isinstance(arg, (int, float)):
raise ValueError("All arguments must be numbers")
return func(*args, **kwargs)
return wrapper
# 应用装饰器到每个形状的perimeter方法上
check_input(Triangle.perimeter)
check_input(Rectangle.perimeter)
check_input(Circle.perimeter)
```
现在,当你尝试调用这三个函数时,如果传入的参数不符合要求,就会抛出异常。例如:
```python
triangle = Triangle(3, 4, 5)
print(triangle.perimeter()) # 输出:12 (已检查输入)
invalid_rectangle = Rectangle("a", 3) # 抛出ValueError: All arguments must be numbers
```
阅读全文