property 作用:是将方法转换为相同名称的只读属性;可以与定义的私有属性配合使用,限制属性被中途修改、并简化代码阅读性
- 使语法具有严谨性、安全性、标准性及高大上些
- 调用方法属性时不需要再加(),加了会报错
- 能更直观的看到它就是属性,从而避免考虑要不要传参数的问题
:::一、源码介绍
class property:
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
"""
Property attribute.
fget
function to be used for getting an attribute value
fset
function to be used for setting an attribute value
fdel
function to be used for del'ing an attribute
doc
docstring
Typical use is to define a managed attribute x:
class C(object):
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
Decorators make defining new properties or modifying existing ones easy:
class C(object):
@property
def x(self):
"I am the 'x' property."
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
# (copied from class doc)
"""
pass
从源码中可以看到两种写法的例子,一种是方法+类属性的编写、一种是装饰器的编写…
:::二、类属性的方式设置属性
class PropertyHandle:
def __init__(self):
self._name = '张三'
def name(self):
"""
属性name的注释信息...
:return:
"""
return self._name
def set_name(self, value):
self._name = value
def del_name(self):
del self._name
p = property(name, set_name, del_name)
对属性进行查、修、删操作
# 创建一个对象
c = PropertyHandle()
# 获取val的注释文案
print(PropertyHandle.p.__doc__)
# 获取属性值
print(c.p)
# 修改属性值
c.p = '李四'
print(c.p)
# 删除属性值
del c.p
从上述可以看到,几乎都c.p操作,它会自动匹配对应的操作
:::三、装饰器的方式设置属性(推荐使用)
class PropertyHandle:
def __init__(self):
self._name = '张三'
@property
def name(self):
"""
属性name的注释信息...
:return:
"""
return self._name
@name.setter
def set_name(self, value):
self._name = value
@name.deleter
def del_name(self):
del self._name
对属性进行查、修、删操作
# 创建一个对象
c = PropertyHandle()
# 获取val的注释文案
print(PropertyHandle.name.__doc__)
# 获取属性值
print(c.name)
# 修改属性值
c.set_name = '李四'
print(c.name)
# 删除属性值
del c.del_name
以上的两种使用方式,代码是等价的;其运行结果是一样的…
属性name的注释信息...
:return:
张三
李四
Process finished with exit code 0
:::四、注释信息获取
class PropertyHandle:
def __init__(self):
self._name = '张三'
def name(self):
"""
属性name的注释信息...
:return:
"""
return self._name
p = property(fget=name, doc="注释信息...")
# 创建一个对象
c = PropertyHandle()
# 获取val的注释文案
print(PropertyHandle.p.__doc__)
如果name方法有注释信息,property的doc也有注释信息,获取doc的注释信息
如果name方法有注释信息,property的doc没有注释信息,获取name方法的注释信息
如果name方法没有注释信息,property的doc有注释信息,获取doc的注释信息
总结完后就是一句话,doc有拿doc的,doc没有拿方法的,都没有就显示None
转载请注明:XAMPP中文组官网 » python:内置函数property的使用