python property

来源:互联网 发布:网络连接没有本地连接 编辑:程序博客网 时间:2024/06/05 22:50

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

执行结果为:

None #print t.namevalue negative # t.name = -5None # print t.nameNone # 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.namet.name = -15t.name = 67print t.namet1 = test1()print t1.namet1.name = 25print t1.name
执行结果如下:

None # print namevalue negative #t.name = -1567 # print t.nameNone # print t1.name25   # print t1.name





0 0
原创粉丝点击