最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • Python 中的装饰器 Getter 和 Setter

    python 中的装饰器 getter 和 setter

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

    属性 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 方法运行它。

    立即学习Python免费学习笔记(深入)”;

    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 代码!

    来源:熨斗学校材料

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » Python 中的装饰器 Getter 和 Setter
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情