概述
1.property内置函数
把结果赋值给一个类属性来创建一个特性
>>> class Person:
... def __init__(self,name):
... self._name = name
... def getName(self):
... print('fetch...')
... return self._name
... def setName(self,value):
... print('change...')
... self._name = value
... def delName(self):
... print('remove...')
... del self._name
... name = property(getName,setName,delName,'name property docs') # 使用property内置函数
...
>>> bob = Person('Bob Smith')
>>> print(bob.name) # 调用了getName方法
fetch...
Bob Smith
>>> bob.name = 'Robert Smith' # 调用了setName方法
change...
>>> del bob.name # 调用了delName方法
remove...
>>>
>>> sue = Person('Sue Jones') # 可以多次创建实例
>>> print(sue.name)
fetch...
Sue Jones
>>> print(Person.name.__doc__) # 调出自定义的文档说明
name property docs
>>>
>>> class Othre(Person): # property特性可以被继承
... pass
...
>>> Jim = Othre('Jim San')
>>> Jim.name
fetch...
'Jim San'
>>>
2.装饰器的两种写法
写法一:
@decorator
def func(args):pass
写法二:
def func(args):pass
func = decorator(func)
而property可以作为装饰器使用,所以有两种写法,
class Person():
@property
def name(self):
pass
或
class Person():
def name(self):
pass
name = property(name)
3.官方介绍property
>>> help(property)
Help on class property in module builtins:
class property(object)
| property(fget=None, fset=None, fdel=None, doc=None) -> property attribute # 对应三种操作,读/写/删,还可自定义文档
|
| fget is a function to be used for getting an attribute value, and likewise
| fset is a function for setting, and fdel a function for del'ing, an
| attribute. 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
注意:
property内置函数只是创建一个特定类型的描述符的一种简化方法,而这种描述符在属性访问时运行方法函数。
从功能上讲,描述符协议允许我们把一个特定属性的get和set操作指向我们提供的一个单独类对象的方法,从而实现属性拦截。
实际上,property内置函数使类对象中默认调用了__getattr__ __setattr__ __delattr__操作符重载的方法,从而重定义属性方法。
最后
以上就是明亮月亮为你收集整理的python学习手册(第4版) 第三十七章 管理属性的全部内容,希望文章能够帮你解决python学习手册(第4版) 第三十七章 管理属性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复