用于限制访问的Python属性

时间:2011-10-27 21:44:27

标签: python properties

我有以下代码:

class C:
    def __init__(self, dx = 1):
       self._dx = dx
    def get_dx(self):
       return self._dx

    dx = property(get_dx,None,None)

c = C()
print c.dx
c.dx = 42
print c.dx  # this shows 42

这应该有效(see here)。但是,它不是,我的问题如下:

  1. 是否可以限制用户执行:c.dx = 42
  2. 如果是这样,怎么样? (我的目的是制作只读属性,我知道总有一种方法来破解它,但我只是想阻止标准的c.dx = val工作)

2 个答案:

答案 0 :(得分:4)

没有定义setter的

property是只读的。这可能不起作用的唯一原因是你使用的是Python 2并定义了一个旧式的类。请记住始终派生自Python 2.x中的object

class C(object):
    @property
    def dx(self):
        return self._dx

    def __init__(self, dx = 1):
        self._dx = dx

答案 1 :(得分:0)

  class C:
    def __init__(self, dx = 1):
       self.__dx = dx
    def get_dx(self):
       return self.__dx

    dx = property(get_dx,None,None)

c = C()
print c.get_dx()
print c.__dx  # this raise error

来源: http://docs.python.org/tutorial/classes.html#private-variables