创建一个 Rectangle 类, ① 添加两个属性 width、height; ② 在 Rectangle 中添加两个方法计算矩形面积这周长; ③ 设计 width 和 height 的访问控制,使得在 Rectangle 的类外能给 width 和 height 变量直接赋值; ④ 设计 width 和 height 的访问控制,使其在 Rectangle 的类外不能直接给 width 和 height 变量赋值,如果在这种情况下需要给 width 和 height 变量赋值,该如何设计该类?
时间: 2024-03-01 16:54:01 浏览: 25
好的,我来逐一回答你的问题。
1. 创建一个 Rectangle 类,添加两个属性 width、height;在 Rectangle 中添加两个方法计算矩形面积和周长。
可以按照如下代码来实现:
```python
class Rectangle:
def __init__(self, width, height):
self.__width = width
self.__height = height
def get_area(self):
return self.__width * self.__height
def get_perimeter(self):
return 2 * (self.__width + self.__height)
```
2. 设计 width 和 height 的访问控制,使得在 Rectangle 的类外能给 width 和 height 变量直接赋值。
可以在类中将 width 和 height 定义为公共属性,如下:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
def get_perimeter(self):
return 2 * (self.width + self.height)
```
这样,在类外就可以直接给 width 和 height 变量赋值了。
3. 设计 width 和 height 的访问控制,使其在 Rectangle 的类外不能直接给 width 和 height 变量赋值。
可以将 width 和 height 定义为私有属性,然后再定义公共方法来获取它们的值和设置它们的值。如下:
```python
class Rectangle:
def __init__(self, width, height):
self.__width = width
self.__height = height
def get_width(self):
return self.__width
def set_width(self, width):
self.__width = width
def get_height(self):
return self.__height
def set_height(self, height):
self.__height = height
def get_area(self):
return self.__width * self.__height
def get_perimeter(self):
return 2 * (self.__width + self.__height)
```
这样,在类外就不能直接给 width 和 height 变量赋值了,需要通过调用 set_width() 和 set_height() 方法来设置它们的值。
4. 如果在上述情况下需要给 width 和 height 变量赋值,该如何设计该类?
如果确实需要在类外直接给 width 和 height 变量赋值,可以在定义类时将其定义为共有属性,并在类中添加对应的方法来获取它们的值和设置它们的值。如下:
```python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def get_width(self):
return self.width
def set_width(self, width):
self.width = width
def get_height(self):
return self.height
def set_height(self, height):
self.height = height
def get_area(self):
return self.width * self.height
def get_perimeter(self):
return 2 * (self.width + self.height)
```
这样,在类外就可以直接给 width 和 height 变量赋值了,也可以通过调用对应的方法来获取它们的值和设置它们的值。