开发手册 欢迎您!
软件开发者资料库

Python3面向对象中property用法

Python中property的使用,相当于Java或C#中get和set属性的用法,主要是为了以后方便对私有字段做验证等情况,本文主要介绍一下Ptyhon3中property的使用。

1、property关键字作用

Python中property关键字,使一个方法看起来就像一个类属性一样,假如我们原来是直接成员访问的方式去访问属性,之后我们可以增加几个方法,在不改变原来接口的情况下,来对一个变量进行取值和赋值。

2、使用实例

class Color:
def __init__(self,value,name):
self.value = value;
self._name = name;
def _set_name(self, name):
if not name:
raise Exception("Invalid Name")
self._name = name
def _get_name(self):
return self._name
name = property(_get_name,_set_name)

3、property是怎样工作的

 property函数实例上返回了一个对象,该对象通过我们指定的方法代理了全部对属性值访问和赋值的请求。property构造函数除了上面的_get_name和_set_name方法,还可以接收两个额外的参数:一个删除函数和一个描述property的字符串。在实际情况中删除函数很少用,但是如果要记录所删除的值,那么删除函数还是很有用的。还可以在满足某个条件下,否决删除操作。如果不提供描述字符串参数,默认是从property的第一个参数的方法的描述字符串中复制过来。

下面的实例可以很方便的看出什么时候哪个方法被用了

class Dog:
def _get_age(self):
print("You are getting age")
return self._age
def _set_age(self, value):
print("You are setting age {}".format(value))
self._age = value
def _del_age(self):
print("You killed age!")
del self._age
age = property(_get_age,_set_age,_del_age,"This is a Dog's age property")

>>> d = Dog()
>>> d.age=11
You are setting age 11
>>> d.age
You are getting age
>>> del d.age
You killed age!

通过help查看帮助文档,会把age属性的自定义描述字符串展示出来

>>> help(Dog)
Help on class Dog in module __main__:
class Dog(builtins.object)
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
|
| age
| This is a Dog's age property
(END)

还需要注意:python中的显式标明的私有变量是可以访问的,但产生的一切问题就应当由他们自己去负责。

在下一篇文章中在分享另一种方法,利用装饰器来创建property