Python property、setter、deleter

yizhihongxing

面向对象封装特点之一就是通过实现好的方法来访问,限制对数据的不合理访问,把对象状态私有化,仅供类的内部进行操作

下方示例,Test方法的number属性类实例的时候传递1,number是一个公开属性,可以在外部任意修改、访问,没有对属性进行进行约束

class Test:
  def __init__(self,number)
  	self.number = number

if __name__ == '__main__':
  test = Test(1)
  print(test.number)
  test.number = -100
  print(test.number) 
@property

@property的作用是声明一个只读属性,在函数上装饰,像调用属性一样的去调用这个函数,对象.属性的方式操作,内部可以做一些逻辑判断,需要注意的两点

  • 调用被装饰方法的时候不+括号
  • 方法定义有且只能有self一个参数
class Test:
    def __init__(self, number):
        self.__number = number

    @property  # 声明number属性,只读
    def number(self):
        if self.__number >= 100:
            raise ValueError('范围超出100')
        return self.__number


if __name__ == '__main__':
    test = Test(3)  
    print(test.number)  # 3

@func.setter

setter就是给@property声明的属性设置值,func是当前函数的名字,但是当前函数setter,又需要指向property,所以property声明的函数名 和 setter的函数名需要一致,根据赋值操作还是获取操作决定走哪个方法

class Test:
  def __init__(self,number):
    self.__number = None
    
  @property # 声明属性
  def number(self):
    if self.__number >= 100:
      raise ValueError('范围超出100')
    return self.__number
  
  @number.setter # 设置属性
  def number(self,number)
  		self.__number = number
    
'''
声明和设置属性的函数名字可以完全自定义,但是要与初始化变量名做区分,如果都一样的话会出现同名递归报错
'''

test = Test()
test.number = 30  # setter 设置值
print(test.number) #property声明的number获取值
@func.deleter

deleter装饰器见名知意,就是属性的删除操作,实际开发过程中,具体实现的逻辑由我们自己实现,当del属性的时候,会触发该装饰器函数内的流程,但是是否是删除操作,根据业务场景来实现

class Test:

    def __init__(self):
        self.__number = None

    @property
    def number(self):
        return self.__number

    @number.setter
    def number(self, number):
        self.__number = number

    @number.deleter
    def number(self):
        self.__number = 100


if __name__ == '__main__':
    test = Test()
    test.number = 10
    print(test.number)  # 10
    del test.number
    print(test.number)  # 100
'''
该示例中,deleter的方法中将number设置为了100,
del test.number后触发该流程,所以在deleter做什么事情,由自己决定,
可以是 del self.__number 也可有是self.__number=None等等,del只是触发条件
'''
property(fget,fset)

除了上面使用装饰器声明,还可有在类中设置属性指向property()对象,设置set和get的方法以及del方法

class Test:

    def __init__(self):
        self.__number = None

    def get_number(self):
        return self.__number

    def set_number(self, number):
        self.__number = number

    def del_number(self):
        del self.__number

    # 设置number属性指向property对象
    # fget 获取的时候触发的方法
    # fset 赋值的时候触发的方法
    # fdel 删除的时候触发的方法

    number = property(fget=get_number, fset=set_number, fdel=del_number)


if __name__ == '__main__':
    test = Test()
    test.number = 100
    print(test.number)
    del test.number

原文链接:https://www.cnblogs.com/Mickey-7/p/17306118.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python property、setter、deleter - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • Python多线程采集二手房源数据信息流程详解

    下面是“Python多线程采集二手房源数据信息流程详解”的完整攻略。 1. 准备工作 在开始进行多线程采集二手房源数据之前,需要先进行准备工作: 安装Python多线程库 安装Python爬虫库 确认需要采集的网站URL 分析需要采集的数据结构 创建MySQL数据库 2. 网站URL和数据结构 在确定需要采集的网站URL之后,需要对需要采集的数据结构进行分析…

    python 2023年5月19日
    00
  • Python实现自动化处理Word文档的方法详解

    Python实现自动化处理Word文档的方法详解 本篇攻略主要介绍如何利用Python实现自动化处理Word文档的方法,包括读取和编辑Word文档、替换文本和格式设置等常用操作。以下为详细步骤: 第一步:安装Python库 要实现自动化处理Word文档,我们需要安装Python的python-docx库。可以通过以下语句来安装: pip install py…

    python 2023年5月13日
    00
  • Python try except finally资源回收的实现

    Pyhon 中的 try-except-finally 代码块是一种异常处理机制。当代码中出现异常时,try 代码块中的代码会停止执行,执行流程会跳到 except 代码块中,尝试捕获异常并进行相应的处理。finally 代码块中的代码不管是否出现异常,都会被执行,可以用来进行资源回收等操作。 在 Python 中使用 try-except-finally …

    python 2023年5月13日
    00
  • Python使用多进程运行含有任意个参数的函数

    我来详细讲解一下Python使用多进程运行含有任意个参数的函数的完整攻略。 攻略概要 Python中的multiprocessing模块提供了一种方便的方法在多个进程之间进行并发执行。我们可以使用多进程来运行任意个参数的函数。 大致的步骤如下: 导入multiprocessing模块; 定义需要运行的函数,这个函数可以拥有任意个参数; 创建多个进程,让每个进…

    python 2023年5月19日
    00
  • python numpy库介绍

    Python Numpy库介绍 什么是Numpy? NumPy是一个开源的Python扩展库,用于数值计算。它包含以下几个部分: 一个强大的N维数组对象 ndarray; 广播功能函数; 整合C/C++/Fortran代码的工具; 线性代数、傅里叶变换、随机数生成等功能。 NumPy是SciPy、Pandas等数据处理或科学计算库的核心库。 如何安装Nump…

    python 2023年5月14日
    00
  • 使用python创建股票的时间序列可视化分析

    下面是使用Python创建股票的时间序列可视化分析的完整攻略: 1. 前置需求 在进行时间序列可视化分析之前,需要先安装以下Python库:pandas、mplfinance、matplotlib和numpy。可以使用pip命令进行安装,例如: pip install pandas mplfinance matplotlib numpy 此外,还需要准备时间…

    python 2023年6月2日
    00
  • 最炫Python烟花代码全解析

    “最炫Python烟花代码全解析”介绍了如何使用Python语言实现烟花动画效果。本文将详细讲解该攻略的具体实现过程。 步骤一:导入必要的库 在实现烟花效果之前,需要导入一些常用的Python库,如random、math、turtle等。它们分别提供了生成随机数、数学计算以及绘图等功能。 import random import math import tu…

    python 2023年5月19日
    00
  • Pandas多列值合并成一列的实现

    要将 Pandas DataFrame 的多列值合并成一列,可使用“Melt”方法或“Concatenate”方法实现。 Melt方法 Melt 方法是一种 Pandas 数据清洗方式,可将 DataFrame 中的多列值整合为新的一列,操作步骤如下: 导入 Pandas 库: import pandas as pd 创建 DataFrame:例如,如下所示…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部