我有一个生成函数(newfunc),它从另一个生成函数(func)生成一个对象(类X),如下所示:
from contextlib import contextmanager
class X(object):
def __init__(self):
self.state = 'oldstate'
def set_state(self, state):
self.state = state
def get_state(self):
return self.state
xobj1 = X()
xobj2 = X()
@contextmanager
def func(xobj, someVar):
print someVar
yield xobj
@contextmanager
def newfunc():
with func(xobj1, 1) as x1:
with func(xobj2, 2) as x2:
yield x2
x1 = x2 %setting to potentially changed object.
with newfunc() as x:
x.set_state('newstate')
现在,由于x1被设置为x2,我希望xobj1的状态也反映“newstate”。但是,只有xobj2的状态设置为“newstate”。两个对象不都应该改变吗?具体来说,应该做些什么来确保两者都发生变化?你知道吗
对自定义对象的指定操作不会复制或覆盖它们。
x1
和x2
是包含对各自对象的引用的变量。当你写:你说的是:“x1应该和x2指同一个对象”。您决不会改变最初由
x1
引用的对象。如果只希望将state
属性从一个对象复制到另一个对象,则需要执行以下操作:它调用x1(xobj1)引用的对象上的
set_state
。你知道吗等等,对于每个需要转移的属性。为了使它更干净,您可以在类X中创建一个新方法:
同样为了使getter和setter更干净,您应该研究属性,这是python中生成封装属性的“干净”方式。你知道吗
相关问题 更多 >
编程相关推荐