Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中拦截成员读取和分配_Python - Fatal编程技术网

在python中拦截成员读取和分配

在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

在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?或者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(或者更一般地说)可以这样做。不过,它们通常不是“邪恶的”。)