Python - 传递对象引用?
我正在学习Python(之前是用dotnet),并开发一个与网络服务互动的应用。
这个网络服务比较简单,有很多调用,其中一些是和会话相关的,比如登录等,而其他的调用则是用来获取或设置业务数据。
为了配合这个网络服务,有几个Python类封装了所有的调用。我想在这个类的基础上开发一个客户端,但希望给客户端更多面向对象的结构。
我自己应用的设计是有一个会话类型的类,负责登录和保持连接等功能,而这个类会被注入到一个业务类型的类中,后者负责进行所有的业务调用。
所以整个结构大概是这样的:
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
我第一个问题是,这样做是Python的方式吗?用静态语言开发应用时的面向对象思维在动态语言中也适用吗?(这可能是个大问题!)
我的第二个问题是,如果这种架构是可以的,那我做错了什么(我想是在以这种方式传递对象引用时)?
非常感谢
S
2 个回答
1
我觉得这里没有什么问题,也没有不符合Python风格的地方。Python的爱好者们常常会提到它和静态语言(比如Java或C#)的不同,但在很多实际应用中,Python也常常使用简单的静态类设计。
我猜webServiceAPI
不是一个类,所以不能被调用。
如果你在使用Python 2.x版本,记得一定要从object
类型继承,否则你会得到一个“经典类”(这是个古老的遗留概念,为了兼容性而保留)。
3
如果WebserviceAPI是一个对象,那就把括号去掉,像这样:
return self._api
你在构造函数里已经创建了这个对象的实例。
也许可以在问题里加上WebserviceAPI的定义,因为现在我只能猜测。