类的装饰器

# property装饰器是用来将类内的函数属性伪装成数据属性
# class People:
# def __init__(self,name,weight,height):
# self.name=name
# self.weight=weight
# self.height=height
#
# @property
# def bmi(self):
# return self.weight / (self.height ** 2)
#
# obj=People('egon',80,1.83)
# obj.height=1.85
# obj.weight=75

# print(obj.bmi()) #本来应该这么使用bmi的方法,但是bmi看上去更加像一个属性,而非方法,所以在bmi方法的头顶加了一个装饰器@property,这样调用的时候只需要 类名.方法名 其实内部执行过程就是把程序执行了一遍
# print(obj.bmi)


# 了解....
# class People:
# def __init__(self,name):
# self.__name=name
#
# @property
# def name(self):
# return '<名字:%s>' %self.__name
#
# @name.setter #黄色字体必须一样 setter方法可以为__name属性赋值
# def name(self,obj):
# if type(obj) is not str:
# print('name必须为str类型')
# return
# self.__name=obj
#
# @name.deleter #deleter方法提供删除的接口,有此装饰器,才可以用del
# def name(self):
# # print('不让删') #可以不让删除
# del self.__name #也可以删除
#
# obj=People('egon')
#
# # print(obj.name)
# # obj.name='EGON'
# # obj.name=123
# # print(obj.name)
#
# del obj.name
# print(obj.__dict__)


例(古老的写法,了解即可):
class People:
def __init__(self,name):
self.__name=name

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

def set_name(self,obj):
if type(obj) is not str:
print('name必须为str类型')
return
self.__name=obj

def del_name(self):
# print('不让删')
#del self.__name

name=property(get_name,set_name,del_name)

obj=People('egon')

# print(obj.name)
# obj.name='EGON'
# obj.name=123
# print(obj.name)

del obj.name
print(obj.__dict__)

posted on 2018-08-21 19:30  海龟先生  阅读(142)  评论(0编辑  收藏  举报

导航