在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?
答案 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