+ -
当前位置:首页 → 问答吧 → 关于python的@property

关于python的@property

时间:2011-02-26

来源:互联网

Python code
class A(object):
    def __init__(self,name):
        self._x = name

    @property
    def x():
        def fget(self):
            print 'I am bing got'
            return self._x
        def fset(self,key):
            print 'I am being set'
            self._x = key
        return locals()
    
a = A('zhang3')




《python核心编程》第396页,有这个实例

当我访问 a.x  时,解释器还是把a.x当成是一个函数,而不是a这个实例的属性,不知道错误处在哪里,请高手指教啊!

作者: w597766166   发布时间: 2011-02-26

没这样用过,所以不是太明白,可能代码就是错的吧。

Python 2.6里的推荐做法:
Python code
class A(object):
    def __init__(self,name):
        self._x = name

    @property
    def x(self):
        return self._x

    @x.getter
    def x(self):
        print 'I am bing got'
        return self._x

    @x.setter
    def x(self, key):
        print 'I am being set'
        self._x = key


还有一种写法,和你的有点像:
Python code
class A(object):
    def __init__(self,name):
        self._x = name

    @apply
    def x():
        def fget(self):
            print 'I am bing got'
            return self._x
        def fset(self,key):
            print 'I am being set'
            self._x = key
        return property(**locals())


作者: iambic   发布时间: 2011-02-26