簡體   English   中英

更改自己的類的Python方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM