我学习Python(来自dotnet背景)并开发一个与web服务交互的应用程序。
网络服务是扁平的,因为它有许多呼叫,其中一些与会话相关,例如登录等,而其他调用与检索/设置业务数据有关。
为了配合web服务,有几个python类包含所有调用。我希望在该类之上开发一个客户端,但为客户端提供更多的OO结构。
我自己的应用程序的设计是有一个Session类型的类,负责登录/维护连接等,但是它本身会被注入一个Business类型的类,它负责进行所有的业务调用
所以堆栈就像
WebService (Soap)
WebServiceWrapper (Python)
Session (Python)
Business (Python)
以下是我的代码示例(我已经重命名了一些方法来尝试使内容更明确)
from webServiceWrapper import webServiceAPI
class Session():
def __init__(self, user, password):
self._api = webServiceAPI()
self.login = self._api.login(user, password)
def webServiceCalls(self):
return self._api()
class Business():
def __init__(self, service):
self._service=service
def getBusinessData(self):
return self._service.get_business_data()
和我的单元测试
class exchange(unittest.TestCase):
def setUp(self):
self.service = Session("username","password")
self._business = Business(self.service.webServiceCalls())
def testBusinessReturnsData(self):
self.assertFalse(self._business.getBusinessData()==None)
单元测试失败
return self._api()
说基础类不可调用
TypeError: 'webServiceAPI' is not callable
我的第一个问题是,是蟒蛇方式吗?用静态语言支持应用程序开发的OO思想是否也适用于动态? (这可能是一个很大的问题!)
我的第二个问题是,如果这种架构没问题,我做错了什么(我想以这种方式传递对象的引用)?
很多thx
取值
答案 0 :(得分:3)
如果WebserviceAPI是一个对象,只需删除括号:
return self._api
您已在构造函数中创建了该对象的实例。
也许将WebserviceAPI的定义添加到问题中,我现在只能猜测。
答案 1 :(得分:1)
我在这里看不到任何错误或非Pythonic。 Pythonistas经常指出与Java或C#等静态语言的差异,但许多现实世界的应用程序大多也使用Python中的简单静态类设计。
我猜webServiceAPI
不是一个类,因此无法调用它。
如果您使用的是Python 2.x,请始终从object
类型继承,否则您将获得一个“经典类”(为了背景兼容性,保留了古代的遗留物)。