python property

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





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值