定义一个矩形类 Rectangle,包含长height 和宽width。首先定义一个额外的封装的可读可写属性edges,可以读写其周长。再定义一个仅可读的 area 属性,返回其面积。在测试代码中使用这两个属性。
时间: 2024-02-21 09:00:57 浏览: 68
好的,下面是实现这个矩形类 Rectangle 的 Python 代码:
```python
class Rectangle:
def __init__(self, height, width):
self.height = height
self.width = width
@property
def edges(self):
return 2 * (self.height + self.width)
@edges.setter
def edges(self, value):
if value < 0:
raise ValueError("Edges must be non-negative")
self.height = (value - 2 * self.width) / 2
self.width = (value - 2 * self.height) / 2
@property
def area(self):
return self.height * self.width
```
在这个类中,我们定义了一个初始化方法 `__init__`,用于初始化矩形的长和宽。
然后,我们用 `@property` 装饰器定义了一个可读可写的属性 `edges`,它返回矩形的周长,并且也可以通过赋值改变矩形的长和宽,从而改变周长。
在 `edges` 的 setter 方法中,我们先检查赋值是否为负数,如果是则抛出 ValueError 异常。然后根据周长计算出新的长和宽,并赋值给对应的属性。
最后,我们用 `@property` 装饰器定义了一个仅可读的属性 `area`,它返回矩形的面积。
下面是测试代码:
```python
rect = Rectangle(3, 4)
print("Edges: ", rect.edges) # 输出 14
print("Area: ", rect.area) # 输出 12
rect.edges = 16
print("Height: ", rect.height) # 输出 4.0
print("Width: ", rect.width) # 输出 6.0
print("Edges: ", rect.edges) # 输出 16
print("Area: ", rect.area) # 输出 24
```
在测试代码中,我们首先创建一个长为 3,宽为 4 的矩形,然后分别输出它的周长和面积。
接着,我们将矩形的周长改为 16,并输出改变后的高和宽、周长和面积。
阅读全文