## 生成property,修改property
class TestAI(object):
"""
机器AI
"""
def __init__(self, name, age):
"""
初始化
"""
self.name = name
self.age = age
self._sex = '男'
@property
def sex(self):
"""
静态属性,不可传参数,使用方式:对象.属性名-----》ai.sex
:return:
"""
try:
return self._sex
except Exception as e:
return '内容有误'
# 如果非要修改属性property,使用@属性.setter装饰,函数与属性名一致
@sex.setter
def sex(self, s):
"""
函数名与 上面的property装饰的属性名一致 使用方式:对象.属性名=属性值 ai.sex='女' 这样就修改了sex属性
:param s:
:return:
"""
self._sex = s
# 如果非要删除属性property,使用@属性.setter装饰,函数与属性名一致
@sex.deleter
def sex(self):
"""
函数名与 上面的property装饰的属性名一致 使用方式:del sex
:param s:
:return:
"""
del self._sex
if __name__ == '__main__':
ai = TestAI('zhangsan', 18)
sex0 = ai.sex # 男
ai.sex = '女'
sex1 = ai.sex # 女
del ai.sex # 删除
sex2 = ai.sex
print(sex2) # AttributeError: 'TestAI' object has no attribute '_sex' 本次代码:内容有误
## 首先,举例一个Room类
## 第二步,将大多数情况下要使用的方法,写在类里,别人可以调用,以免重复编写代码
重点来了:property是class内自带的,可以装饰函数的装饰器,其作用,先简单描述一下:
## @property装饰的函数,在调用时,不需要像:对象.函数名()
而是:对象.函数名
优化:让@property装饰的函数,调用的效果和数据属性一样,其实数据属性就是静态属性,即:某些函数属性可以做成静态属性