Inside Test.change
, that self
是一个参数,而参数只是局部变量。
重新绑定局部变量不会对函数之外的任何内容产生任何影响。
特别是,它对任何其他变量(或列表元素,或其他对象的属性等)没有影响,例如全局变量a
,它们也绑定到相同的值。它们仍然具有相同值的名称。
甚至不清楚你是什么trying在这里做。你改变类型a
进入类型b
,这样就可以了。但你还想做什么?
你想改变吗a
进入物体b
,具有相同的身份?如果是这样,您不需要任何方法;就是这样a = b
方法。或者你想成为一个不同的实例,但共享一个实例__dict__
?或者复制全部b
的属性变为a
?浅还是深?是否有任何额外属性a
躺在周围的东西也被移除了吗?你只关心存储在__dict__
,或者您是否需要,例如__slots__
上班?
无论如何,某件事might合理地说,对于一些奇怪的用例,是这样的:
def change(self, other):
inherited = dict(inspect.getmembers(self.__class__))
for name, value in inspect.getmembers(self):
if name not in inherited and not name.startswith('__'):
delattr(self, name)
self.__class__ = other.__class__
inherited = dict(inspect.getmembers(other.__class__))
for name, value in inspect.getmembers(other):
if name not in inherited and not name.startswith('__'):
setattr(self, name, value)
这是否有用your用例,我不知道。但也许它可以让您了解可以使用 Python 数据模型实际执行哪些操作。