python中的@property装饰器
时间: 2023-04-28 10:04:57 浏览: 124
@property装饰器是Python中用于将一个方法声明为一个属性的语法糖。使用@property装饰器后,方法可以像访问一个普通属性一样访问,而不用使用括号。例如:
```
class MyClass:
def __init__(self):
self._x = None
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
```
上面的代码中,x是一个属性,它的值由x()方法返回,并由x.setter装饰的x()方法设置。
使用时,可以直接使用
```
>>> obj = MyClass()
>>> obj.x = 5
>>> obj.x
5
```
而不用
```
>>> obj = MyClass()
>>> obj.x(5)
>>> obj.x()
5
```
相关问题
python2 @property 装饰器
在 Python 2 中,@property 装饰器需要结合其他装饰器来定义属性的获取方法和设置方法。具体来说,需要使用 @<属性名>.getter 装饰器来定义获取方法,以及 @<属性名>.setter 装饰器来定义设置方法。
下面是一个示例:
```python
class Person(object):
def __init__(self, age):
self._age = age
def get_age(self):
return self._age
def set_age(self, value):
if value < 0:
raise ValueError("Age cannot be negative.")
self._age = value
age = property(get_age, set_age)
```
在上述示例中,我们定义了一个 Person 类,其中有一个私有属性 _age。通过 @property 装饰器,我们将 get_age 方法转化为只读属性的获取方法。然后,通过 age = property(get_age, set_age) 将 age 属性与对应的获取和设置方法关联起来。
这样,我们就可以通过 `person.age` 获取属性值,以及通过赋值语句 `person.age = 30` 设置属性值。在获取属性值时,会自动调用 `get_age()` 方法;在设置属性值时,会自动调用 `set_age(value)` 方法。
需要注意的是,在 Python 2 中,我们需要手动定义获取和设置方法,并使用 property() 函数将它们绑定到属性上。而在 Python 3 中,只需要使用 @property 和 @<属性名>.setter 装饰器即可。
python3与python2 @property 装饰器区别·
在 Python 2 和 Python 3 中,@property 装饰器的使用是相似的,但有一些区别。
在 Python 2 中,@property 装饰器需要结合另外两个装饰器来定义属性的获取方法和设置方法,它们分别是 @<属性名>.getter 和 @<属性名>.setter。示例如下:
```python
class Person(object):
def __init__(self, age):
self._age = age
def get_age(self):
return self._age
def set_age(self, value):
if value < 0:
raise ValueError("Age cannot be negative.")
self._age = value
age = property(get_age, set_age)
```
在 Python 3 中,@property 装饰器可以直接与获取方法和设置方法一起使用,无需额外的装饰器。示例如下:
```python
class Person:
def __init__(self, age):
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative.")
self._age = value
```
可以看到,Python 3 中的写法更加简洁,不需要额外的装饰器来定义属性的获取和设置方法。这是 Python 3 在语法层面上对 @property 装饰器进行了改进的一个例子。
阅读全文