【发布时间】:2013-02-14 16:06:43
【问题描述】:
假设我有一个包含一组参数的master 对象的单个实例,然后是应该能够访问和修改主控属性的slave 对象的多个实例。在我的特殊情况下,slave 是wxPython GUI 对象,其中可能有多个 GUI 控件可以修改相同的参数。
如果我在从站想要更新它时明确引用master.parameter,显然这是微不足道的。但是我真的不想这样做,因为它需要我编写不同的函数来处理来自每个从属对象的事件。
我目前正在做这样的事情,master 对每个属性都有单独的 get_value 和 set_value 方法:
class Master(object):
def __init__(self):
self.value = 0
def get_value(self):
return self.value
def set_value(self,value):
self.value = value
class Slave(object):
def __init__(self,getfunc,setfunc):
self.getfunc = getfunc
self.setfunc = setfunc
def update(self,value):
self.setfunc(value)
def run():
master = Master()
slave = Slave(master.get_value,master.set_value)
print "\nMaster: %i\nSlave: %i" %(master.value,slave.getfunc())
slave.update(1)
print "\nMaster: %i\nSlave: %i" %(master.value,slave.getfunc())
if __name__ == "__main__":
run()
我真正想做的是设置slave.bound_value之类的东西,它的行为就像指向master.value的指针,这样当任何slave修改其bound_value时,@987654334的相应属性@ 已更新。我完全知道 Python 不支持指针,但我想知道是否有一种很好的 Pythonic 方法来实现相同的目标?
【问题讨论】:
-
“我完全知道 Python 不支持指针” - Python 中的每个名称都是一个引用。这在很多方面都很简单。如果你为你想要的值创建一个可变对象,那么从服务器可以像主服务器一样存储对它的引用,它会完全按照你的意愿运行。
-
注意Python不是Java;我们很少需要使用 getter 和 setter。当我们这样做时,我们将它们包装在
@property中以隐藏我们正在使用 getter 和 setter 的事实。 -
@Lattyware 我的意思是像 C 或 C++ 中的指针一样工作的指针,正如 here所讨论的那样@
-
我仍然很难弄清楚你想要什么。您想创建一个
Slave对象,将对以bound_开头的属性的操作委托给Master? -
@mgilson 不,我想创建一个
Slave的实例,它“绑定”到Master实例的属性,这样当slave更新它的bound_value属性时,那么master对应的属性也会发生变化
标签: python class oop pointers attributes