python类中的@property讲解和setter和getter
时间: 2023-08-08 21:09:47 浏览: 101
`@property` 可以用来将一个方法转换为只读属性,在类中定义 `@property` 装饰器时,可以像调用属性一样访问这个方法,而无需使用括号调用方法。下面是一个示例:
```python
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def diameter(self):
return self._radius * 2
@property
def area(self):
return 3.14 * (self._radius ** 2)
```
在上面的示例中,`@property` 装饰器用于将 `radius`、`diameter` 和 `area` 方法转换为只读属性。现在可以像访问属性一样访问这些方法:
```python
c = Circle(5)
print(c.radius) # 5
print(c.diameter) # 10
print(c.area) # 78.5
```
除了只读属性外,还可以使用 `@属性名.setter` 装饰器来定义可写属性,这些可写属性允许我们修改类中定义的属性。下面是一个示例:
```python
class Rectangle:
def __init__(self, width, height):
self._width = width
self._height = height
@property
def width(self):
return self._width
@width.setter
def width(self, value):
self._width = value
@property
def height(self):
return self._height
@height.setter
def height(self, value):
self._height = value
@property
def area(self):
return self._width * self._height
```
在上面的示例中,`@width.setter` 和 `@height.setter` 装饰器用于定义可写属性 `width` 和 `height`,这些属性可以用于修改类中定义的 `_width` 和 `_height` 属性。现在我们可以像修改属性一样修改它们:
```python
r = Rectangle(5, 3)
print(r.area) # 15
r.width = 7
print(r.area) # 21
```
阅读全文