一、基础用法

property 装饰方法的行为可以当做属性来用, 可单纯返回一些数据
通过 setter 方法, 属性name 的值可以被改变, 并且在方法里做一些简单的校验

二、 应用示例

class User(object):

def __init__(self, username):
self._username = username

@property
def username(self):
return self._username

@username.setter
def username(self, username):
if len(username) < 5:
raise Exception('name laste len 5')
self._username = username

@property
def user_count(self): # 单纯获取数据库用户的纪录有多少
return self.username.order_by('create_at').count()

if __name__ == '__main__':
user = User('zhangsan')
name = user.username # 输出 zhangsan

# user.username = 'lisi' # username 的属性得到约束 zhangsan

user.username = 'wanger'
name = user.username

print(user.user_count)

__私有属性: 只能在类的内部访问 作用:数据保护、数据过滤
只读属性: 一个属性(一般实例属性)只能读取,不能写入
1. 把类设置私有属性属性 2 提供方法报漏外界 3.property方法

class Student:
def __init__(self):
self.__age = 17

@property # 作用: 可以使用属性方式使用方法
def age(self):
return self.__age

@age.setter # 作用: 重新设置私有属性的值 否则重新设置时报错
def age(self, value):
self.__age = value

if __name__ == '__main__':
p1 = Student()
print(p1.age)

p1.age = 18
print(p1.age)

三、复杂用法