如何在python中以不同的名称封装类中的不同方法?

时间:2014-03-18 10:27:25

标签: python design-patterns

所以我目前正在尝试用Python开发一个测试框架,并且我已经开发了一系列用于此的API方法。这个框架将被许多不同的人使用,他们对“被测系统”有不同的经验和知识,所以已经决定让一个简单的API和一个更“本机”的API可用是有用的。 API方法都使用ip-session连接“被测系统”,并且在整个测试会话期间此会话必须相同。到现在为止还挺好。但是我发现在同一个测试中同时使用“简单API方法”和“本机API方法”可能很有用,并且它们必须以某种方式共享此ip-session。在此之前我做了这样的事情:

nativeAPI(object):
    def __init__(self):
        self.session = createSession(password, systemip)

    def someAPImethod(self):
        return dosomeTestStuff(self.session)

simpleAPI(object):
    def __init__(self):
        self.session = createSession(password, systemip)

    def someAPImethod(self):
        return dosomeTestStuff(self.session)


#Test code written by a person using the framework could look something like this.
testMethods = nativeAPI()
testMethods.someAPImethod()

但是现在我想更喜欢“测试者”可以使用与此类似的语法:

testMethods = createSession()
testMethods.nativeAPI.someAPIMethod()

我尝试使用“createSession”类中的“NativeAPI”类来执行此操作,但最终出现了以下错误问题:“必须使用实例作为第一个参数调用未绑定方法”。所以我问你:我该怎么办呢? Python中有什么好的设计模式?

2 个答案:

答案 0 :(得分:2)

只需在nativeAPI中创建一个包含简单createSession实例的简单对象,然后返回:

class Wrapper(object):

    def __init__(self, nativeAPI):
        self.nativeAPI = nativeAPI

def createSession():
    nativeAPI = ...
    return Wrapper(nativeAPI)

答案 1 :(得分:0)

我会将simpleAPI作为nativeAPI的子类。

这样,即使您拥有nativeAPI实例,也始终可以使用simpleAPI方法。更好的是,simpleAPI方法可以用nativeAPI来实现,简化了代码:

nativeAPI(object):
    def __init__(self):
        self.session = createSession(password, systemip)

    def someAPImethod(self):
        return dosomeTestStuff(self.session)

simpleAPI(nativeAPI):
    def someSimpleAPImethod(self):
        result = self.someAPImethod()
        result.doSomethingToSimplify()
        return result