Python 属性限制访问

1 投票
2 回答
2461 浏览
提问于 2025-04-17 05:08

我有以下代码:

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

这应该是可以工作的 (可以查看这里)。但是,它并没有正常工作,我的问题如下:

  1. 有没有可能限制用户这样做:c.dx = 42
  2. 如果可以的话,怎么做?(我的目的是让属性只能读取,我知道总有办法绕过这个限制,但我只是想阻止标准的 c.dx = val 这种写法有效)

2 个回答

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

4

没有定义设置器的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

撰写回答