标签:person 方式 sel setter ## erro -o val fragment
如果在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()
python 中的@property
标签:person 方式 sel setter ## erro -o val fragment
原文地址:http://www.cnblogs.com/Rubick7/p/7801557.html