特性property

#property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接引用
# class People:
# def __init__(self,name,weight,height):
# self.name=name
# self.weight=weight
# self.height=height
#
# @property
# def bmi(self): # bmi本来应该是一个数据属性,变成函数后,调用需要obj.bmi() .怎么才能让使用者
# 调用时和调用正常数据属性一样,需要用到property来装饰。
# return self.weight / (self.height ** 2)
#
# peo1=People('egon',75,1.8)
#
# peo1.height=1.85
# print(peo1.bmi) # 这样调用就不需要bmi后面加括号了


'''
class People:
def __init__(self,name):
self.__name=name

@property # 查看obj.name # 直接用obj.name就可以查看
def name(self):
return '<名字是:%s>' %self.__name

@name.setter #修改obj.name=值 # 修改属性值,需要把修改的值传入,然后self.__name初始化值为name
def name(self,name):
if type(name) is not str:
raise TypeError('名字必须是str类型傻叉')
self.__name=name

@name.deleter #删除del obj.name # 直接在外部 del peo1.name
def name(self):
# raise PermissionError('不让删')
print('不让删除傻叉')
# del self.__name

peo1=People('egon')
# print(peo1.name)

# print(peo1.name)

# peo1.name='EGON'
# print(peo1.name)

del peo1.name

'''


class People:
def __init__(self,name):
self.__name=name


def tell_name(self):
return '<名字是:%s>' %self.__name

def set_name(self,name):
if type(name) is not str:
raise TypeError('名字必须是str类型傻叉')
self.__name=name

def del_name(self):
print('不让删除傻叉')

name=property(tell_name,set_name,del_name) # 这里是固定顺序


peo1=People('egon')
del peo1.name # 顺序不重要,顶多先修改
peo1.name='EGON'
print(peo1.name)
print(peo1.name)
# peo1.name='EGON'
# print(peo1.name)
# del peo1.name
原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9238928.html