python的内置装饰器

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\\开发工具\\pythonProject\\PyClassTest\\venv\\Scripts\\python.exe F:/开发工具/pythonProject/PyClassTest/test03.py
0.5
0.25
3

Process finished with exit code 0

以上是关于python的内置装饰器的主要内容,如果未能解决你的问题,请参考以下文章

装饰器生成器迭代器及python中内置函数的使用

python基础--定义装饰器(内置装饰器)

Python - 所有内置装饰器是啥? [关闭]

python学习--装饰器生成器内置函数json

python之装饰器生成器内置函数JSON

32.Python面向对象描述符运算符底层装饰器:闭包-闭包参数-内置装饰器-类装饰器