Использование Python/Selenium, у меня есть много объектов страницы, которые будут возвращать друг другу, следуя ссылке. Это работает отлично, но для удобства я хотел бы постоянно вызывать методы на одной и той же переменной, не переназначая ее.Метод Python, изменяющий свой собственный класс
Игрушечный пример ниже:
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.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'
Я получаю ощущение, что если вы это сделали, вы тогда хотите, чтобы адаптировать его изменить в произвольных объектов, и прежде чем вы это знаете, вы будете делать вызовы типа 'x.become (y)', и вы даже не заметите, что вы только что заново изобрели переменные. – user2357112
Почему вы не хотите переназначать? На самом деле не должно быть никаких оснований. – JDrost1818
Я могу переназначить, правда, мне просто интересно, есть ли альтернатива. Когда webdriver переходит на новую страницу, старый объект страницы бесполезен. Немногие/ни одна из его команд не будет работать, мало/ни одного из ее элементов не существует, и это приведет к отказу. –