正在加载中...

对 python 中 @property 和计算属性的一些思考

前言

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

计算属性

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

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 即可,以上~

posted @ 2022-03-08 14:20  之一Yo  阅读(263)  评论(0编辑  收藏  举报