从静态类重构Python?

时间:2018-12-18 23:08:21

标签: python-3.x refactoring

在我的代码中,我都使用python这样的“静态”类:     curStatus = StaticClass.getStat()

其中

class StaticClass:
    @staticmethod
    def getStat () -> str:
        return "noSimulate"

但是现在我有一个重构问题,有时SIMULATE是TRUE或FALSE

SIMULATE: bool = false

如果Simulate为true,我希望staticmethod.getStat()是不同的方法。 但是我只想检查一次SIMULATE并使用多态来完成其余的工作。

&我不想重构整个代码库。

如何仅通过一次检查SIMULATE来更改StaticClass方法?

1 个答案:

答案 0 :(得分:0)

我使用了以下信息:python3-patterns

并创建了这两个.py文件: 测试多态性

# https://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html
SIMULATE:bool = True

# class myBase(object):
class myBase:
    @staticmethod
    def factory(sim:bool) :
        return yesSim() if sim else myBase()

    @staticmethod
    def getDroneStatus() -> str:
        print("myBase.getDroneStatus()")
        return "UNITIALIZED! FAIL!!"

    @staticmethod
    def getStaticStatus() -> str:
        print("myBase.getStaticStatus()")
        return "UNITIALIZED! FAIL!!"


class yesSim(myBase):

    @staticmethod
    def getDroneStatus() -> str:
        return "yesSim"


GSCRAMtcp = myBase.factory(SIMULATE)

if __name__ == '__main__':
    myTCP = myBase.factory(SIMULATE)
    print(myTCP.getStaticStatus())
    print(myTCP.getDroneStatus())

和此测试文件:

from Testing.polymorphism.testPolymorph import GSCRAMtcp

if __name__ == '__main__':
    print(GSCRAMtcp.getDroneStatus())
    print(GSCRAMtcp.getStaticStatus())