您的位置:首页 > 编程语言 > Python开发

python property

2015-12-23 19:43 639 查看
python在内置模块__builtin__中有一个类property

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
使用方法大概就是上面所示的两种了
举个例子如下:

class test:
def __init__(self):
self.__name = None
@property
def name(self):
#self.__name = None
return self.__name
@name.setter
def name(self, value):
if value < 0:
print 'value negative'
return
self.__name = value

t = test()
print t.name
t.name = -5
print t.name

t1 = test()
print t1.name
t1.name = 100
print t1.name
@property修饰了类方法后,类实例化后,我们可以像访问实例属性一样访问被修饰的方法(这些方法经过修饰后,其实就变成了一个property对象,property对象中含有被修饰的几种方法)

执行结果为:

None #print t.name
value negative # t.name = -5
None # print t.name
None # print t1.name
100  # print t1.name


没看到property的源代码,自己按照自己所想,实现一个实现property的简单的类, 如下:

class myproperty(object):
def __init__(self, getx=None, setx=None, delx=None, doc=None):
self.getx = getx
self.setx = setx
self.delx = delx
self.__doc__ = doc
def getter(self, getx):
return type(self)(getx, self.setx, slef.delx, self.__doc__)
def setter(self, setx):
return type(self)(self.getx, setx, self.delx, self.__doc__)
def __get__(self, instance, owner):
if self.getx:
return self.getx(instance)
return None
def __set__(self, instance, value):
if self.setx:
return self.setx(instance,value)


示例代码如下:

class test1(object):
def __init__(self):
self.__name = None
@myproperty
def name(self):
return self.__name
@name.setter
def name(self, value):
if value < 0:
print 'value negative'
return
self.__name = value

t = test1()
print t.name
t.name = -15
t.name = 67
print t.name

t1 = test1()
print t1.name
t1.name = 25
print t1.name
执行结果如下:

None # print name
value negative #t.name = -15
67 # print t.name
None # print t1.name
25   # print t1.name
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: