最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

python:内置函数property的使用

XAMPP案例 admin 648浏览 0评论

dre92

property 作用:是将方法转换为相同名称的只读属性;可以与定义的私有属性配合使用,限制属性被中途修改、并简化代码阅读性

  • 使语法具有严谨性、安全性、标准性及高大上些
  • 调用方法属性时不需要再加(),加了会报错
  • 能更直观的看到它就是属性,从而避免考虑要不要传参数的问题

 

:::一、源码介绍

class property:

    def __init__(self, fget=None, fset=None, fdel=None, doc=None):
        """
        Property attribute.

          fget
            function to be used for getting an attribute value
          fset
            function to be used for setting an attribute value
          fdel
            function to be used for del'ing an attribute
          doc
            docstring

        Typical use is to define a managed attribute x:

        class C(object):
            def getx(self): return self._x
            def setx(self, value): self._x = value
            def delx(self): del self._x
            x = property(getx, setx, delx, "I'm the 'x' property.")

        Decorators make defining new properties or modifying existing ones easy:

        class C(object):
            @property
            def x(self):
                "I am the 'x' property."
                return self._x
            @x.setter
            def x(self, value):
                self._x = value
            @x.deleter
            def x(self):
                del self._x
        # (copied from class doc)
        """
        pass

从源码中可以看到两种写法的例子,一种是方法+类属性的编写、一种是装饰器的编写…

 

:::二、类属性的方式设置属性

class PropertyHandle:

    def __init__(self):
        self._name = '张三'

    def name(self):
        """
        属性name的注释信息...
        :return:
        """
        return self._name

    def set_name(self, value):
        self._name = value

    def del_name(self):
        del self._name

    p = property(name, set_name, del_name)

 

对属性进行查、修、删操作

# 创建一个对象
c = PropertyHandle()
# 获取val的注释文案
print(PropertyHandle.p.__doc__)
# 获取属性值
print(c.p)
# 修改属性值
c.p = '李四'
print(c.p)
# 删除属性值
del c.p

从上述可以看到,几乎都c.p操作,它会自动匹配对应的操作

 

:::三、装饰器的方式设置属性(推荐使用)

class PropertyHandle:

    def __init__(self):
        self._name = '张三'

    @property
    def name(self):
        """
        属性name的注释信息...
        :return:
        """
        return self._name

    @name.setter
    def set_name(self, value):
        self._name = value

    @name.deleter
    def del_name(self):
        del self._name

 

对属性进行查、修、删操作

# 创建一个对象
c = PropertyHandle()
# 获取val的注释文案
print(PropertyHandle.name.__doc__)
# 获取属性值
print(c.name)
# 修改属性值
c.set_name = '李四'
print(c.name)
# 删除属性值
del c.del_name

 

以上的两种使用方式,代码是等价的;其运行结果是一样的…


        属性name的注释信息...
        :return:
        
张三
李四

Process finished with exit code 0

 

:::四、注释信息获取

class PropertyHandle:

    def __init__(self):
        self._name = '张三'

    def name(self):
        """
        属性name的注释信息...
        :return:
        """
        return self._name

    p = property(fget=name, doc="注释信息...")


# 创建一个对象
c = PropertyHandle()

# 获取val的注释文案
print(PropertyHandle.p.__doc__)

如果name方法有注释信息,property的doc也有注释信息,获取doc的注释信息

如果name方法有注释信息,property的doc没有注释信息,获取name方法的注释信息

如果name方法没有注释信息,property的doc有注释信息,获取doc的注释信息

 

总结完后就是一句话,doc有拿doc的,doc没有拿方法的,都没有就显示None

转载请注明:XAMPP中文组官网 » python:内置函数property的使用

您必须 登录 才能发表评论!