Python-传递对象引用?

Python-传递对象引用?,python,oop,Python,Oop,我从dotnet背景学习Python,并开发了一个与web服务交互的应用程序 web服务是扁平的,因为它有许多调用,其中一些与会话(例如登录等)相关,而其他调用与检索/设置业务数据相关 为了配合Web服务,有几个python类包装了所有调用。我希望在这个类的基础上开发一个客户机,但是给客户机更多的OO结构 我自己的应用程序的设计是有一个会话类型类,负责登录/维护连接等,但它本身将被注入一个业务类型类,负责进行所有业务调用 所以堆栈类似于 WebService (Soap)

我从dotnet背景学习Python,并开发了一个与web服务交互的应用程序

web服务是扁平的,因为它有许多调用,其中一些与会话(例如登录等)相关,而其他调用与检索/设置业务数据相关

为了配合Web服务,有几个python类包装了所有调用。我希望在这个类的基础上开发一个客户机,但是给客户机更多的OO结构

我自己的应用程序的设计是有一个会话类型类,负责登录/维护连接等,但它本身将被注入一个业务类型类,负责进行所有业务调用

所以堆栈类似于

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的方式吗?用静态语言支持应用程序开发的OO思维是否也有利于动态应用程序的开发?这可能是一个很大的问题

我的第二个问题是,如果这种体系结构还可以,我想在以这种方式传递对象引用方面,我做错了什么

许多thx


我看不出这里有什么不对劲的地方。Pythonistas经常指出与Java或C等静态语言的区别,但许多实际应用程序也大多使用Python中的简单静态类设计

我猜webServiceAPI不是一个类,因此不能调用它


如果您使用的是Python2.x,请始终从对象类型继承,否则您将得到一个“经典类”,它是为了与背景兼容而保留的古代遗物。

我在这里没有看到任何错误或不符合Python的地方。Pythonistas经常指出与Java或C等静态语言的区别,但许多实际应用程序也大多使用Python中的简单静态类设计

我猜webServiceAPI不是一个类,因此不能调用它


如果您使用的是Python2.x,请始终从对象类型继承,否则您将得到一个“经典类”,它是古代的遗物,保留用于背景兼容性。

如果WebserviceAPI是一个对象,请删除类似的括号:

return self._api 
您已经在构造函数中创建了对象的实例


也许可以在问题中添加WebserviceAPI的定义,我现在只能猜测。

如果WebserviceAPI是一个对象,只需删除这样的括号:

return self._api 
您已经在构造函数中创建了对象的实例


也许在问题中添加WebserviceAPI的定义,我现在只能猜测。

什么是WebserviceAPI?如果python说,这是不可调用的,那么,不管它是什么,它都是不可调用的。只是您的webServiceAPI似乎没有定义_调用_。此外,您应该查看代码样式指南,最好遵循it@shylent:除了测试用例的名称之外,我没有看到任何不符合样式指南的内容@KennyTM:我认为webServiceAPI是某种类型,因此不必显式定义调用。注释的Thx webServiceAPI是webServiceWrapper.py中的一个类。对webServiceAPI.Login的调用在会话类中成功运行,但当传递到业务类中时,对它的调用失败。什么是webServiceAPI?如果python说,这是不可调用的,那么,不管它是什么,它都是不可调用的。只是您的webServiceAPI似乎没有定义_调用_。此外,您应该查看代码样式指南,最好遵循it@shylent:除了测试用例的名称之外,我没有看到任何不符合样式指南的内容@KennyTM:我认为webServiceAPI是某种类型,因此不必显式定义调用。注释的Thx webServiceAPI是webServiceWrapper.py中的一个类。对webServiceAPI.Login的调用在会话类中成功运行,但当传递到业务类中时,对它的调用失败。。。许多人对这些评论表示感谢。我认为我在静态类设计领域是相当安全的!然而,决定在何处使用动态和/或功能技术来取代这种设计选择和伴随它的各种设计模式,这是我非常不确定的地方!我只看过你的课堂设计的一小部分,无法从中判断设计是否过于静态。我认为你应该记住,静态设计本身并没有错,只是在某些情况下不够理想。我能给ATM的唯一建议是不要使用getter和setter:所有成员变量在Python中都是公共的,所以Java风格的封装不起作用,而且是多余的。。。许多人对这些评论表示感谢。我认为我在静态类设计领域是相当安全的!然而,决定
这种设计选择和伴随它而来的各种设计模式应该用动态和/或功能技术来取代,这是我非常不确定的地方!我只看过你的课堂设计的一小部分,无法从中判断设计是否过于静态。我认为你应该记住,静态设计本身并没有错,只是在某些情况下不够理想。我能给ATM的唯一建议是不要使用getter和setter:所有成员变量在Python中都是公共的,因此Java风格的封装不起作用,而且是多余的。另外一件事,我不知道WebserviceAPI是做什么的,但听起来并不是你现在正在做的每一个会话都需要它的实例。嗯,Logon返回一个令牌,我确实需要在对webservice的所有后续调用中使用它。此外,WebServiceAPI包装了我所称的soap Web服务的业务调用。因此,ISTM,要么我需要在我的业务类中重新实例化WebServiceAPI,传递我登录时获得的令牌,要么我传递对以前实例化的WebServiceAPI的引用。我选择了传递实例。不知道这是否正确。请随意提供更好的设计。还有一件事,我不知道WebserviceAPI是做什么的,但听起来并不是你现在正在做的每一个会话都需要一个它的实例。好的,WebserviceAPI.Logon返回一个令牌,我确实需要在以后对webservice的所有调用中使用它。此外,WebServiceAPI包装了我所称的soap Web服务的业务调用。因此,ISTM,要么我需要在我的业务类中重新实例化WebServiceAPI,传递我登录时获得的令牌,要么我传递对以前实例化的WebServiceAPI的引用。我选择了传递实例。不知道这是否正确。请随时提供更好的设计。