Python设计一个形状类shape,这个类包括构造方法和周长方法: (1)定义一个矩形类Rectangle,矩形类继承形状类,矩形类中实现求周长方法 (2)定义正方形类square继承矩形类,正方形
时间: 2024-06-22 12:02:35 浏览: 21
在Python中,你可以按照以下步骤设计一个基础的`Shape`类和它的子类`Rectangle`和`Square`:
首先,我们创建一个抽象的`Shape`类,作为所有形状的基类,包含一个构造方法和一个计算周长的抽象方法:
```python
from abc import ABC, abstractmethod
class Shape(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def perimeter(self):
pass
def __str__(self):
return f"{self.name} shape"
# 父类 Shape 的抽象方法 perimeter 未实现
```
接下来,我们定义`Rectangle`类,它继承自`Shape`,并实现`perimeter`方法:
```python
class Rectangle(Shape):
def __init__(self, length, width):
super().__init__("Rectangle")
self.length = length
self.width = width
def perimeter(self):
return 2 * (self.length + self.width)
# 可选:添加一个边长为0的检查,防止除以0错误
def _check_length_width(self):
if self.length <= 0 or self.width <= 0:
raise ValueError("Length and width must be positive.")
def __str__(self):
return f"{self.name}(Length: {self.length}, Width: {self.width})"
```
然后,定义`Square`类,它继承自`Rectangle`,因为正方形是特殊的矩形,所以它可以直接继承矩形的属性,并且长度和宽度相等:
```python
class Square(Rectangle):
def __init__(self, side):
super().__init__(side, side)
```
现在,你已经创建了一个基础的形状类结构,包括抽象的`Shape`,具体实现的`Rectangle`,以及作为`Rectangle`子类的`Square`。如果需要使用这些类,你可以这样做:
```python
# 创建一个矩形实例
rect = Rectangle(4, 6)
print(rect.perimeter()) # 输出:20
print(rect) # 输出:Rectangle(Length: 4, Width: 6)
# 创建一个正方形实例
square = Square(5)
print(square.perimeter()) # 输出:20
print(square)
相关推荐
![uml](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)