python 中的@property

如果在Java中定义类,我们经常使用类来封装一些属性,比如说,Student类中,有firstname 和 lastname,同时的,为了能访问和修改这个属性,我们还会设置set和get方法,但是,在Python中,我们可以使用@property的方法来将一个方法变成一个类属性,并且,利用同样的方式,来生成set和get方法,如下代码:

  ########################################################################

class Person(object):

""""""

#----------------------------------------------------------------------

def __init__(self, first_name, last_name):

"""Constructor"""

self.first_name = first_name

self.last_name = last_name

#----------------------------------------------------------------------

@property

def full_name(self):

"""

Return the full name

"""

return "%s %s" % (self.first_name, self.last_name)

在以上的代码中,我们定义了一个full name属性,是由first name和last name来生成的,这样的好处在于,我们可以在不添加现有属性的情况下,添加一个处理过的属性,并且可以在这个

方法中增加复杂的逻辑,并且,这个属性在没有定义setter和getter的方法前,只能被访问而不能被修改,如下代码:

  >> person = Person("Mike", "Driscoll")

>>> person.full_name

‘Mike Driscoll‘

>>> person.first_name

‘Mike‘

>>> person.full_name = "Jackalope"

Traceback (most recent call last):

File "<string>", line 1, in <fragment>

AttributeError: can‘t set attribute

from decimal import Decimal

########################################################################

class Fees(object):

""""""

#----------------------------------------------------------------------

def __init__(self):

"""Constructor"""

self._fee = None

#----------------------------------------------------------------------

@property

def fee(self):

"""

The fee property - the getter

"""

return self._fee

#----------------------------------------------------------------------

@fee.setter

def fee(self, value):

"""

The setter of the fee property

"""

if isinstance(value, str):

self._fee = Decimal(value)

elif isinstance(value, Decimal):

self._fee = value

#----------------------------------------------------------------------

if __name__ == "__main__":

f = Fees()

时间: 2024-10-07 15:53:48

python 中的@property的相关文章

python中的property属性

目录 1. 什么是property属性 2. 简单的实例 3. property属性的有两种方式 3.1 装饰器方式 3.2 类属性方式,创建值为property对象的类属性 4. property属性-应用 4.1. 私有属性添加getter和setter方法 4.2. 使用property升级getter和setter方法 4.3. 使用property取代getter和setter方法 1. 什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # #

Python中的@property和decorator

初次认识decorator和@property Welcome. 在本文中,将详细学习如何使用Python中的decorator和@property. 将会学习的内容: 使用decorator的优势. 使用@property的优势. 装饰器函数的基础知识:它们是什么以及如何与@property关联起来. 如何使用@property定义getter.setter和deleter. Python中decorator的优势 在不确定其他代码块对现有函数的调用,不改变现有函数,保证代码可靠稳定,避免修改

Python中的@property装饰器

要了解@property的用途,首先要了解如何创建一个属性. 一般而言,属性都通过__init__方法创建,比如: 1 class Student(object): 2 def __init__(self,name,score): 3 self.name=name 4 self.score=score 创建实例,运行结果: 1 tim=Student('Tim',97) 2 tim.score=100 3 tim.score 4 100 5 mary=Student('Mary',90) 6 m

python中的property

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute fget is a function to be used for getting an attribute value, and likewise fset is a function for setting, and fdel a function for del'ing, an attribute. Typical use is to defi

python中的property注解

装饰器(decorator)可以给函数动态加上功能吗?对于类的方法,装饰器一样起作用.Python内置的 @property 装饰器就是负责把一个方法变成属性调用的: class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must

python中的property及实现lazy property

@property有什么用呢?表面看来,就是将一个方法用属性的方式来访问. 上代码,代码最清晰了. class Circle(object): def __init__(self, radius): self.radius = radius @property def area(self): return 3.14 * self.radius ** 2 c = Circle(4) print c.radius print c.area 可以看到,area虽然是定义成一个方法的形式,但是加上@pr

python中的@property

@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的 class People: def __init__(self,name,weight,height): self.__name=name self.weight=weight self.height=height @property def bmi(self): return self.weight / (self.height**2) @bmi.dele

Python中的property()函数

property() 函数的作用是在新式类中返回属性值 1.语法: class property([fget[, fset[, fdel[, doc]]]]) 2.参数: fget -- 获取属性值的函数 fset -- 设置属性值的函数 fdel -- 删除属性值函数 doc -- 属性描述信息 3.返回值:返回新式类属性 4.实例:银行卡案例,假设钱是私有属性. class Card: def __init__(self, card_no): '''初始化方法''' self.card_no

python中使用@property

class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between