在python中拦截成员读取和分配
在Objective-C中,以下代码似乎正在将在python中拦截成员读取和分配,python,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
设置为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?或者print语句是否可能由于Foo中实现的恶意getter而显示4?您可以使用
属性
-但我不明白您为什么要这样做。下面将物理地将该值设置为预期之外的值,您可以修改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
是:Python(或者更一般地说)可以这样做。不过,它们通常不是“邪恶的”。)