面向对象-属性-property操作只读属性,property的用法很广泛,可以通过property把函数当做属性使用,方便快捷而且能提前实现数据处理,不像属性那样简单的赋值。
# property的用法很广泛,可以通过property把函数当做属性使用,方便快捷而且能提前实现数据处理,不想属性那样简单的赋值
# 1.property第一种使用方法
# 先看文档
class Person:
def __init__(self):
self.name = 'Tom'
self.__money = 100
def setMoney(self, val):
if (isinstance(val, int) or isinstance(val, float)) and val >= 0:
self.__money = val
else:
print('请输入正确的金额!')
def getMoney(self):
return self.__money
# money = property(setMoney, getMoney) # 注意两个参数的顺序不能错
money = property(getMoney, setMoney)
per = Person()
print(per.money)
per.money = 85 # 这里是重新赋值,不是增减属性
print(per.__dict__) # {'name': 'Tom', '_Person__money': 85},没有出现新的属性
print(per.money)
# 2.property第二种使用方法
class Person:
def __init__(self):
self.name = 'Tom'
self.__money = 100
# 先使用property装饰器让__money成为只读属性
@property
def money(self):
return self.__money
# 看下面文档
'''
class C(object):
@property
def x(self):
"I am the 'x' property."
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
'''
@money.setter
def money(self, val):
self.__money = val
per = Person()
# per.setmoney = 56 # 这样也能设置只读属性
# print(per.__dict__)
# print(per.getmoney)
# 为了方便上面的getmoney和setmoney可以使用同名money
per.money = 56 # 这样也能设置只读属性
print(per.__dict__)
print(per.money)