• (8)propetry装饰器


    propetry是一个内置函数,用来将一个功能伪装成一个数据属性

    property将一个方法伪装成一个数据属性
    class People:
    def __init__(self,name,height,weight):
    self.name=name
    self.height=height
    self.weight=weight

    @property
    def bmi(self):
    return self.weight / (self.height ** 2)

    obj=People('egon',1.8,70)
    obj.height=1.81
    obj.weight=69
    # print(obj.bmi()) #没有伪装前是这样调用的
    print(obj.bmi) #伪装后是这样调用的

    例:将一个接口伪装成数据属性

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

    @property
    def name(self):
    return self.__name

    print(name) #将一个接口伪装成一个数据属性让用户调用

    例:查看、修改和删除接口

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

    @property
    def name(self): #这个功能函数是被property装饰过的
    return self.__name

    @name.setter #这里就可以以被装饰函数为起始名写一个setter修改接口
    def name(self,val):
    if type(val) is not str:
    print('名字必须是str类型')
    return
    self.__name=val

    @name.deleter #这里就可以以被装饰函数为起始名写一个deletery删除接口
    def name(self):
    print('不让删除')

    obj=People('egon')

    print(obj.name)
    obj.name='EGON' #调用了修改接口,修改了name的值
    print(obj.name)

    del obj.name #调用删除接口
    print(obj.name)

    PS:但凡被propetry装饰的函数,后面都可以以函数名为起始调用(@name.setter 修改/ @name.deleter 删除)

    PS:setter对应的就是修改属性,deleter对应的就是删除操作,propetry对应的就是查看操作

    旧的写法

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

    def get_name(self):#这里函数名没有限制,但是一般都是标识性的名字
    return self.__name

    def set_name(self,val):
    if type(val) is not str:
    print('名字必须是str类型')
    return
    self.__name=val

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

    name=property(get_name,set_name,del_name) #这里括号里的必须是按照查看、修改、删除排序,必须按照顺序,而且返回值不能乱赋值,必须赋值给对应的属性

    obj=People('egon')

    obj.name
    obj.name=123
    del obj.name
  • 相关阅读:
    Finalize,Dispose,SuppressFinalize
    防火防盗防微软,Firefox发布插件自动检测服务
    Nginx的Rewrite设置及示例
    Linux游戏开发包 ClanLib 2.1.0 发布
    HTTP协议详解(真的很经典)
    Linux on POWER:发行版迁移和二进制兼容性考虑事项
    映射网络驱动器VBS脚本
    [笔记] 使用 opcache 优化生产环境PHP
    2020最新版MySQL数据库面试题(三)
    请注意,面试中有这7个行为肯定会被拒绝!
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10125730.html
Copyright © 2020-2023  润新知