zoukankan      html  css  js  c++  java
  • Python——@property属性描述符

    @property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的

    假设定义了一个类Cls,该类必须继承自object类,有一私有变量__x

    1. 第一种使用属性的方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # blog.ithomer.net
     
    class Cls(object):
        def __init__(self):
            self.__x = None
         
        def getx(self):
            return self.__x
         
        def setx(self, value):
            self.__x = value
             
        def delx(self):
            del self.__x
             
        x = property(getx, setx, delx, 'set x property')
     
    if __name__ == '__main__':
        c = Cls()
        c.x = 100
        y = c.x
        print("set & get y: %d" % y)
         
        del c.x
        print("del c.x & y: %d" % y)

    运行结果:

    set & get y: 100
    del c.x & y: 100

    在该类中定义三个函数,分别用作赋值、取值、删除变量

    property函数原型为property(fget=None,fset=None,fdel=None,doc=None),上例根据自己定义相应的函数赋值即可。


    2. 第二种方法(在2.6中新增)
    同方法一,首先定义一个类Cls,该类必须继承自object类,有一私有变量__x

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class Cls(object):
        def __init__(self):
            self.__x = None
             
        @property
        def x(self):
            return self.__x
         
        @x.setter
        def x(self, value):
            self.__x = value
             
        @x.deleter
        def x(self):
            del self.__x
     
    if __name__ == '__main__':
        c = Cls()
        c.x = 100
        y = c.x
        print("set & get y: %d" % y)
         
        del c.x
        print("del c.x & y: %d" % y)

    运行结果:
    set & get y: 100
    del c.x & y: 100
    说明: 同一属性__x的三个函数名要相同。

  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/Simon-xm/p/4085579.html
Copyright © 2011-2022 走看看