Python 中的装饰器 Getter 和 Setter

PHPz
发布: 2024-08-06 03:46:53
原创
1069 人浏览过

Decorator Getters and Setters in Python

装饰器的一种类型是属性 getter 和 setter。这些装饰器允许对类实例中的变量进行受控访问。

属性获取器和设置器专门设计用于面向对象编程中的属性控制。它们与函数装饰器不同,因为它们用于类属性(请在此处查看我关于函数装饰器的帖子)。

函数装饰器和属性 getter 和 setter 装饰器都使用可重用代码修改代码并使用“@”语法。它们都改变了代码的功能。

好吧,让我们开始吧。

属性 getter 和 setter 应用于类中的方法来定义各种行为。 setter 将属性设置为值,getter 从类中获取属性。该属性首先设置

让我们看一个例子,然后我们将其分解:

class Shoe:
    def __init__(self, brand = "Adidas", size = 9):
        self.brand = brand
        self.size = size
        self._condition = "New"

    @property
    def size(self):
        """The size property"""
        return self._size

    @size.setter
    def size(self, size):
        """size must be an integer"""
        if isinstance(size, int):
            self._size = size
        else:
            print("size must be an integer")

    def cobble(self):
        """Repairs the shoe and sets the condition to 'New'."""
        self.condition = "New"
        print("Your shoe is as good as new!")

    @property
    def condition(self):
        """The condition property"""
        return self._condition

    @condition.setter
    def condition(self, condition):
        self._condition = condition
登录后复制

让我们看一下这段代码:

一些属性(条件、大小)前的下划线向开发者表明它们是私有的;它们特定于 Shoe 类的每个实例(每只鞋,小写)。

您可能会注意到条件和大小的实例化方式不同。 self._condition = "New" 表示鞋类的每个实例(或对象)都以“New”条件进行实例化。对size属性也做同样的事情,但是不写成self._size = 9这样会触发setter属性验证,因为size需要是一个整数(这是一个称为验证的过程)。我们直接设置每个鞋对象的条件,而不是通过属性 setter 和 getter 方法运行它。

cobble 方法不需要装饰器,因为它只是执行一个操作,而不是获取/设置每个鞋子对象的属性。

让我们对代码进行最后一项更改。例如,如果我们想确保 size 属性以后不能改变怎么办?毕竟,鞋子的尺寸并不会真正改变,不是吗?

我们可以使用 hasattr() 函数对每个鞋子对象执行检查。它是否具有由“_size”的存在指示的私有大小属性​​?如果是这样,则无法更改。这是实现的代码:

 @size.setter
    def size(self, size):
        """size must be an integer and can't be changed once set"""
        if hasattr(self, '_size'):
            raise AttributeError("Can't change size once set")
        if isinstance(size, int):
            self._size = size
        else:
            raise ValueError("size must be an integer")

登录后复制

属性 setter 和 getter 掌握起来有点困难,但一旦理解了,你就会像专业人士一样编写 Python 代码!

来源:

熨斗学校材料

以上是Python 中的装饰器 Getter 和 Setter的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!