拦截成员在python中读取和赋值

时间:2013-08-22 19:38:02

标签: python

在Objective-C中,以下代码似乎将myobj.x设置为3:

Foo *myobj = [[Foo alloc] init];
myobj.x = 3;
NSLog(@"%d", myobj.x);

然而,Foo可能实现了x的setter函数,它会拦截这个动作,例如将x设置为4。从x读取也是如此:看起来只是读取x的值的代码实际上可能是在Foo中命中getX函数。

是否可以在python中执行相同的操作?执行以下代码时:

myobj = Foo()
myobj.x = 3
print myobj.x

有没有办法将myobj.x实际设置为4?或者由于在Foo中实现了邪恶的getter,print语句是否可能显示4?

1 个答案:

答案 0 :(得分:2)

你可以使用property - 为什么你想要做到这一点超出我的意义。以下物理上将值设置为除预期之外的某个值,您可以修改getter的值以返回不同的值。

class Blah(object):
    def __init__(self, value):
        self._value = value
    @property
    def value(self):
        return self._value
    @value.setter
    def value(self, value):
        self._value = value + 1

b = Blah(3)
b.value = 25
print b.value
# 26
相关问题