我试图想出一种方法来跟踪对象在Python中的各种重新化身。例如,我想有一个班级,比如说,一个房间。这个房间可以开始作为一个“厨房”存在,然后,在任何特定的时间点,成为一个“书房”。我希望能够跟踪(或记录)我房间生活中的所有这些不同阶段。所以,我想出了这个办法,想知道有没有更好的办法。或者我错过了什么。不过,据我所知,它似乎对我的目的有效。在
class room():
def __init__(self,current="Any", history = []):
self.current = childroom(current)
self.history = history
self.history.append(self.current)
def changeroom(self,current = "New"):
self.current = childroom(current)
self.history.append(self.current)
class childroom(room):
def __init__(self,name="Any"):
self.name = name
当我使用这个代码时。。。在
^{pr2}$
这听起来像是facade模式的一个例子-拥有一个捕捉当前状态的interner room对象,并在facade上使用
__setattr__
来捕获分配,归档以前的状态(内部对象),并使用更新的属性值创建一个新的。您需要重写__getattr__
以委托给内部对象,内部对象也将具有用于其他任何操作的适当方法。在我个人会这样做:
请记住,我不知道您的实际设置是否有一些限制深度复制的功能。在
这就产生了:
^{pr2}$我想通常你不需要保存对象的整个状态,只需要保存值得跟踪的属性。你可以按照以下思路将这种行为打包成一个装饰师:
现在我们可以这样使用这个装饰器:
如果用
@Track ('holder')
调用,则会产生:如果使用
@Track ('holder', 'price')
调用,则会产生:如果用
@Track ('holder', saveState = True)
调用,则会产生:相关问题 更多 >
编程相关推荐