Python中@property与计算属性有何区别与联系?

2026-05-26 19:311阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计448个文字,预计阅读时间需要2分钟。

Python中@property与计算属性有何区别与联系?

前言:Python 中提供了 @property 装饰器,可以将一个成员函数变为成员变量,从而实现属性的封装。在此之前,我们似乎只认为这只是为了实现 setter 和 getter 而存在的,但学习了 Vue 的计算属性后,才发现其应用远不止于此。

前言

python 中提供了​​@property​​装饰器,可以将一个成员函数变为成员变量来访问,之前只是觉得这东西应该就只是为了​​setter​​和​​getter​​而存在的,但是学了 Vue 的计算属性后对这个装饰器有了新的见解。

计算属性

在 Vue 中提供了计算属性​​computed​​,避免在模板中写出很长的表达式。仔细想想,用了​​@property​​装饰器的方法不就是计算属性的​​get()​​吗,然后​​@property.setter​​不就是​​set()​​吗?有了​​get()​​之后,当一个变量发生变化时,计算属性也随之发生变化,这样在更新变量时没必要手动在代码中更新计算属性的值,代码看起来就更加简洁了。比如,有以下代码:

Python中@property与计算属性有何区别与联系?

复制class ImageViewer:

def __init__(self):
self.imagePaths = ['キラキラ.png', '恋をしたのは.png']
self.index = 0

def next(self):
if self.index >= len(self.imagePaths)-1:
return

self.index += 1

def previous(self):
if self.index <= 0
return

self.index -= 1

@property
def imagePath(self):
return self.imagePaths[self.index]

有了​​@property​​之后,每次访问到的​​imagePath​​都会是最新的,没必要在​​next()​​方法和​​previous()​​中再写一行更新​​imagePath​​的代码,我们只需维护好​​index​​即可。

本文共计448个文字,预计阅读时间需要2分钟。

Python中@property与计算属性有何区别与联系?

前言:Python 中提供了 @property 装饰器,可以将一个成员函数变为成员变量,从而实现属性的封装。在此之前,我们似乎只认为这只是为了实现 setter 和 getter 而存在的,但学习了 Vue 的计算属性后,才发现其应用远不止于此。

前言

python 中提供了​​@property​​装饰器,可以将一个成员函数变为成员变量来访问,之前只是觉得这东西应该就只是为了​​setter​​和​​getter​​而存在的,但是学了 Vue 的计算属性后对这个装饰器有了新的见解。

计算属性

在 Vue 中提供了计算属性​​computed​​,避免在模板中写出很长的表达式。仔细想想,用了​​@property​​装饰器的方法不就是计算属性的​​get()​​吗,然后​​@property.setter​​不就是​​set()​​吗?有了​​get()​​之后,当一个变量发生变化时,计算属性也随之发生变化,这样在更新变量时没必要手动在代码中更新计算属性的值,代码看起来就更加简洁了。比如,有以下代码:

Python中@property与计算属性有何区别与联系?

复制class ImageViewer:

def __init__(self):
self.imagePaths = ['キラキラ.png', '恋をしたのは.png']
self.index = 0

def next(self):
if self.index >= len(self.imagePaths)-1:
return

self.index += 1

def previous(self):
if self.index <= 0
return

self.index -= 1

@property
def imagePath(self):
return self.imagePaths[self.index]

有了​​@property​​之后,每次访问到的​​imagePath​​都会是最新的,没必要在​​next()​​方法和​​previous()​​中再写一行更新​​imagePath​​的代码,我们只需维护好​​index​​即可。