python property

python property

在2.6版本中,添加了一种新的类成员函数的访问方式--property。

原型

class property([fget[, fset[, fdel[, doc]]]])

fget:获取属性

fset:设置属性

fdel:删除属性

doc:属性含义

用法

1.让成员函数通过属性方式调用

class C(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, "I‘m the ‘x‘ property.")
a = C()
print C.x.__doc__ #打印doc
print a.x #调用a.getx()

a.x = 100 #调用a.setx()
print a.x

try:
    del a.x #调用a.delx()
    print a.x #已被删除,报错
except Exception, e:
    print e

输出结果:

I‘m the ‘x‘ property.None
100
‘C‘ object has no attribute ‘_x‘

2.利用property装饰器,让成员函数称为只读的

class Parrot(object):
    def __init__(self):
        self._voltage = 100000

    @property
    def voltage(self):
        """Get the current voltage."""
        return self._voltage

a = Parrot()
print a.voltage #通过属性调用voltage函数
try:
    print a.voltage() #不允许调用函数,为只读的
except Exception as e:
    print e

输出结果:

100000
‘int‘ object is not callable

3.利用property装饰器实现property函数的功能

class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I‘m the ‘x‘ property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

其他应用

1.bottle源码中的应用

class Request(threading.local):
    """ Represents a single request using thread-local namespace. """
    ...

    @property
    def method(self):
        ‘‘‘ Returns the request method (GET,POST,PUT,DELETE,...) ‘‘‘
        return self._environ.get(‘REQUEST_METHOD‘, ‘GET‘).upper()

    @property
    def query_string(self):
        ‘‘‘ Content of QUERY_STRING ‘‘‘
        return self._environ.get(‘QUERY_STRING‘, ‘‘)

    @property
    def input_length(self):
        ‘‘‘ Content of CONTENT_LENGTH ‘‘‘
        try:
            return int(self._environ.get(‘CONTENT_LENGTH‘, ‘0‘))
        except ValueError:
            return 0

    @property
    def COOKIES(self):
        """Returns a dict with COOKIES."""
        if self._COOKIES is None:
            raw_dict = Cookie.SimpleCookie(self._environ.get(‘HTTP_COOKIE‘,‘‘))
            self._COOKIES = {}
            for cookie in raw_dict.values():
                self._COOKIES[cookie.key] = cookie.value
        return self._COOKIES

2.在django model中的应用,实现连表查询

from django.db import models

class Person(models.Model):
     name = models.CharField(max_length=30)
     tel = models.CharField(max_length=30)

class Score(models.Model):
      pid = models.IntegerField()
      score = models.IntegerField()

      def get_person_name():
            return Person.objects.get(id=pid)

       name = property(get_person_name) #name称为Score表的属性,通过与Person表联合查询获取name
时间: 2024-12-26 15:57:06

python property的相关文章

Python @property 属性

Python @property 修饰符 python的property()函数,是内置函数的一个函数, 会返回一个property的属性: 可以在以下网页查看它的描述:property 文档上面说property()作为一个修饰符, 这会创建一个只读的属性. class Parrot: def __init__(self): self._voltage = 100000 @property def voltage(self): """Get the current volt

Python @property 详解

本文讲解了 Python 的 property 特性,即一种符合 Python 哲学地设置 getter 和 setter 的方式. Python 有一个概念叫做 property,它能让你在 Python 的面向对象编程中轻松不少.在了解它之前,我们先看一下为什么 property 会被提出. 一个简单的例子 比如说你要创建一个温度的类Celsius,它能存储摄氏度,也能转换为华氏度.即: class Celsius: def __init__(self, temperature = 0):

Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义

一.单星号 * 采用 * 可将列表或元祖中的元素直接取出,作为随机数的上下限: import random a = [1,4] print(random.randrange(*a)) 或者for循环输出: import random a = [1,4] for i in range(*a): print(i) ''' result : 1 2 3 ''' 二.双星号 ** 双星号 ** 可将字典里的“值”取出,如下例 class Proxy(object): def __init__(self,

python @property使用详解

[email protected],@xx.setter的作用把方法变成属性@property获取属性@xx.setter设置属性 2.使用示例 #@property使用 class Lang(object): def __init__(self,name,score): self.name=name self.score=score self.__rank=4 @property def rank(self): return self.__rank @rank.setter def rank(

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.i

python property内建函数的介绍

函数property的基本功能就是把类中的方法当作属性来访问,下面以一个有意思的例子介绍一下: 假如有一只猫,它忘了它喜欢吃什么,下面看看我们如何治好它吧 原代码:    #运行环境 python2.7.10 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 classCat(object): def__init__(self,food): self.food=food defeat(self): returnself.food defsay(self): if'

python property方法的使用

property的作用:实例:class C:    def __init__(self, size = 10):        self.size = size def getSize(self):        return self.size def setSize(self, value):        self.size = value def delSize(self):        del self.size x = property(getSize, setSize, del

Python property,属性

参考资料 http://www.ibm.com/developerworks/library/os-pythondescriptors/ 顾名思义,property用于生成一个属性,通过操作这个属性,可以映射为对某些函数的操作,类似于C#. 形式为 pvar = propery(get_func, set_func, del_fun, doc_func); 在get,set,del,doc的时候分别调用相应的函数: 尝试这样定义 >>> aa = property(lambda: &qu

python property属性

能够检查參数,一直没注意这个语言特性,忽略了非常多细节,感谢 vitrox class Person( object ): def __init__( self, name ): if not isinstance( name, str ): raise TypeError( '...' ) else: self.__name = name @property def name( self ): print 'get name.' return self.__name @name.setter