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的内置装饰器的主要内容,如果未能解决你的问题,请参考以下文章