• property 的详细使用方法


    property(fget=None, fset=None, fdel=None, doc=None) 

    俗话说条条大路通罗马,同样是完成一件事,Python 其实提供了好几个方式供你选择。

    property() 是一个比较奇葩的BIF,它的作用把方法当作属性来访问,从而提供更加友好访问方式。

    官方帮助文档代码:

    1. class C:
    2.     def __init__(self):
    3.         self._x = None
    4.     def getx(self):
    5.         return self._x
    6.     def setx(self, value):
    7.         self._x = value
    8.     def delx(self):
    9.         del self._x
    10.     x = property(getx, setx, delx, "I'm the 'x' property.")
    复制代码


    property() 返回一个可以设置属性的属性,当然如何设置属性还是需要我们人为来写代码。第一个参数是获得属性的方法名(例子中是 getx),第二个参数是设置属性的方法名(例子中是 setx),第三个参数是删除属性的方法名(例子中是 delx)。

    property() 有什么作用呢?举个例子,在上边的例题中,我们为用户提供 setx 方法名来设置 _x 属性,提供 getx 方法名来获取属性。但是有一天你心血来潮,突然想对程序进行大改,可能你需要把 setx 和 getx 修改为 set_x 和 get_x,那你不得不修改用户调用的接口,这样子的体验就非常不好。

    有了 property() 所有问题就迎刃而解了,因为像上边一样,我们为用户访问 _x 属性只提供了 x 属性。无论我们内部怎么改动,只需要相应的修改 property() 的参数,用户仍然只需要去操作 x 属性即可,对他们来说没有任何影响。


    使用属性修饰符创建描述符

    使用属性修饰符创建描述符,也可以实现同样的功能(【扩展阅读】Python 函数修饰符(装饰器)的使用):

    官方帮助文档代码:

    1. class C:
    2.     def __init__(self):
    3.         self._x = None
    4.     @property
    5.     def x(self):
    6.         """I'm the 'x' property."""
    7.         return self._x
    8.     @x.setter
    9.     def x(self, value):
    10.         self._x = value
    11.     @x.deleter
    12.     def x(self):
    13.         del self._x
    复制代码


    注意:三个处理 _x 属性的方法名要相同(参数不同)。

  • 相关阅读:
    PHP安装swoole
    linux系统占用问题排查
    使用PHP实现对Excel的文本替换操作
    java类 static成员变量 以及方法都会被子类继承吗
    FragmentTransaction的commit和commitAllowingStateLoss的区别
    【git】.gitignore文件
    java中lambda表达式双冒号::的使用
    java虚拟机常见的参数笔记
    Android 形状绘制 —— shape详解
    Git版本回退 初探
  • 原文地址:https://www.cnblogs.com/fclbky/p/4098191.html
Copyright © 2020-2023  润新知