1

在 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,打印语句是否可能显示 4?

4

1 回答 1

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
于 2013-08-22T19:41:13.373 回答