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

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值