在编写类中经常遇到那种写一个函数,然后返回一个值的情况,然而我们需要得到那个值需要通过类对象调用该方法来实现。如:
class Money(object):
def __init__(self):
self.__money = 100
def money(self):
return self.__money
def set_money(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
获取money值:
m = Money()
money = m.money()
是不是很麻烦?如果我们能够直接可以通过某个属性就能获得应该会方便许多,那么怎么做呢?
可以这样定义这个类:
class Money(object):
def __init__(self):
self.__money = 100
@property
def money(self):
return self.__money
def set_money(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
这个时候,就可以通过访问money属性获得其值了:
m= Money()
money = m.money
那么问题来了,如果我想把money的数量更改呢?能不能也通过这种属性赋值的方式实现?而不是调用set_money方法。答案是可以的。再次重新定义类:
class Money(object):
def __init__(self):
self.__money = 0
@property
def money(self):
return self.__money
@money.setter
def money(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型数字")
此时可以通过类属性来进行更改money值了。
In [4]: a = Money()
In [5]: a.money = 10
In [6]: a.money
Out[6]: 10
Conclusion:
@property成为属性函数,可以对属性赋值时做必要的检查
@money.setter可以对属性函数进行相应的写操作