栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python的内置装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python的内置装饰器

Python中总共包括三个内置装饰器:

1、staticmethod   (静态方法使用)

2、 classmethod     (类方法)

3、property             (把类的方法伪装成属性)

 1和2之前介绍过了,主要介绍一下property方法【格式】

@property装饰适合下面这些场景:

1.只读不可修改的属性。只需要实现@property

2.输入对setter进行判断。

3.需要实时地计算属性值。

属性名=property(fget=None, fset=None, fdel=None, doc=None)

其中,fget 参数用于指定获取该属性值的类方法,fset 参数用于指定设置该属性值的方法,fdel 参数用于指定删除该属性值的方法,最后的 doc 是一个文档字符串,用于说明此函数的作用。

注意:在使用 property() 函数时,以上 4 个参数可以仅指定第 1 个、或者前 2 个、或者前 3 个,当前也可以全部指定。也就是说,property() 函数中参数的指定并不是完全随意的。

property第一种用法:

#公共属性  name
#口头私有属性 _name(单前置下划线,私有化属性或方法,from somemodule import 禁止导入,类对象和子类可以访问)
#【在模块或类外不可以使用,只是约定,不能真正做到不能访问】
#私有属性 __name(前置双下划线,私有化属性或方法,只有内部可以访问,外部不能访问)
#__init__(python的魔法方法)
class Cup:
    def __init__(self,name):
        self.__name = name

    def setname(self,name):
        self.__name = name

    def getname(self):
        return self.__name

    def delname(self):
        self.__name = 'hui'

    # 为name 属性配置 property() 函数
    name = property(getname, setname, delname, '指明出处')


if __name__ == '__main__':
    cip = Cup('huitao')
    # 调用 getname() 方法
    print(cip.name)
    # 调用 setname() 方法
    cip.name = "今天结束"
    print(cip.name)
    # 调用 delname() 方法
    del cip.name
    print(cip.name)

property第二种用法:

class CUp2:
    #__name表示私有属性
    #如果只有@property装饰,那么value是只读不可写的
    def __init__(self):
        self.__name='name'

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

    @confire.setter
    def confire(self,name):
        self.__name=name

    @confire.deleter
    def confire(self):
        del self.__name


if __name__ == '__main__':
    cup = CUp2()
    #setter
    cup.name='huijuju'
    # getsetter
    print(cup.name)
    #deltter
    del cup.name

第三种计算属性:

class compute:
    def __init__(self):
        self.weight=1
        self.height=2
    @property
    def one(self):

        return self.weight/self.height

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

    @property
    def three(self):

        return  self.weight+self.height


if __name__ == '__main__':

    com = compute()

    print(com.one)
    print(com.two)
    print(com.three)

输出:

F:开发工具pythonProjectPyClassTestvenvscriptspython.exe F:/开发工具/pythonProject/PyClassTest/test03.py
0.5
0.25
3

Process finished with exit code 0

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674570.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号