使用Python / Selenium,我有很多页面对象在链接后会互相返回。这非常有效,但为了方便起见,我想在不重新分配相同变量的情况下不断调用方法。
以下玩具示例:
class Foo(object):
identity = 'foo'
def __init__(self, key):
self.key = key
def change(self):
return Bar(self.key)
class Bar(object):
identity = 'bar'
def __init__(self, key):
self.key = key
def change(self):
return Blah(self.key)
class Blah(object):
identity = 'blah'
def __init__(self, key):
self.key = key
def change(self):
return Foo(self.key)
x = Foo('somekey')
x.identity # > 'foo'
x.key # > 'somekey'
x = x.change()
x.identity # > 'bar'
x.key # > 'somekey'
我希望在不重新分配x的情况下继续对返回的对象执行操作,例如:
x.change().identity # > 'blah'
x.identity # > *should* result in 'blah', not 'bar'
我收集我需要某种容器类,它将所有方法调用委托给子变量,并重新分配它。但是,我无法弄清楚如何。我想它的作用是这样的:
x = SomeContainer(Foo, 'otherkey')
x.change().change()
x.key # > 'otherkey'
x.identity # > 'blah'
x.change()
x.identity # > 'foo'
答案 0 :(得分:0)
如果你想改变你班级某些方法的行为,但不打算改变班级的类型,那么你可能会对州(设计)模式感兴趣。
例如,如果您想要更改标识,则根据当前标识,每个功能都有两个不同的类。 在伪代码中它的工作方式如下:
class BasicIdentity
Identity identityA;
Identity identityB;
Identity currentIdentity;
void PrintIdentity()
{
currentState.printIdentity()
}
void ChangeIdentity()
{
if currentIdentity == identityA
currentIdentity = identityB
else
currentIdentity = identityA
}