[英]Can Python type hints handle a generic class changing its own type in a method?
[英]Python method changing its own class
使用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'
如果要更改類的某些方法的行為,但又不想更改類的類型,則可能對狀態(設計)模式感興趣。
例如,如果您想更改身份,則根據當前身份,每種功能將具有兩個不同的類。 在偽代碼中,它的工作方式如下:
class BasicIdentity
Identity identityA;
Identity identityB;
Identity currentIdentity;
void PrintIdentity()
{
currentState.printIdentity()
}
void ChangeIdentity()
{
if currentIdentity == identityA
currentIdentity = identityB
else
currentIdentity = identityA
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.