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

2024-09-24 22:32:31 发布

您现在位置: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?或者print语句是否可能由于Foo中实现的恶意getter而显示4?你知道吗


Tags: 函数代码fooinit语句setterprint动作
1条回答
网友
1楼 · 发布于 2024-09-24 22:32:31

你可以用一个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

相关问题 更多 >