mik*_*ana 8 python setter properties instance-variables instance
我@property用来确保对对象实例变量的更改由我需要的方法包装.
当一个实例有一个逻辑上不应该改变的变量时呢?例如,如果我正在为一个Process创建一个类,那么每个Process实例都应该有一个经常被访问但不应该被更改的PID属性.
什么是处理试图修改该实例变量的人的最Pythonic方法?
只是相信用户不要尝试改变他们不应该做的事情?
如果更改了实例变量,请使用属性但引发异常?
别的什么?
在前面添加变量的名称__,并创建只读属性,Python将处理异常,并且变量本身将受到保护,以防意外覆盖.
class foo(object):
    def __init__(self, bar):
        self.__bar = bar
    @property
    def bar(self):
        return self.__bar
f = foo('bar')
f.bar         # => bar
f.bar = 'baz' # AttributeError; would have to use f._foo__bar