我正在处理一个项目,并且我遇到了一个问题,即一个类的实例被传递给许多工作对象。
broker = Broker(...)
worker1 = Worker(broker, "001")
worker2 = Worker(broker, "002")
worker3 = Worker(broker, "003")
所有这些工作者现在都在调用它们作为参数传递的Broker对象中的函数。由于工人都在管理由ID标识的不同经纪人账户,id
参数(" 001"," 002"," 003&#34 ;)需要在每次函数调用时从工作者传递给代理,以便他们可以识别自己,并且经纪人知道他必须向哪个帐户发送指令。
从内部算法逻辑中解析出来的一个操作可能是关闭worker1的所有位置:
worker1.closeAllPositions()
Worker-Class的功能实现是以将指令传递给Broker-Class的方式完成的。但是由于Broker确实需要知道当前调用它的worker的ID,所以它的id
作为参数传递:
class Worker:
def __init__(self, broker, id):
self.id = id
self.broker = broker
def closeAllPositions(self):
self.broker.closeAllPositions(self.id)
def getSummary(self):
self.broker.getSummary(self.id)
def getBalance(self):
self.broker.getBalance(self.id)
所有Broker接口现在都配备了id
参数,因此从工作者到Broker的任何函数调用都使用帐户进行标识。但是由于Broker函数具有子依赖关系(id传递给第一个没有必要将id传递给链中任何其他代理函数的人)id
- 问题失控并且ID被传递到处都很快,看起来非常不洁净。
class Broker:
def __init__(self, ...):
...
def getSummary(self, id):
self.setCallerID(id) <-!!! Ugly
....
def getBalance(self, id, returnType):
self.setCallerID(id) <-!!! Ugly
....
我没有在任何函数调用上传递此信息,而是在寻找引擎方法来解析调用者ID。类似于调用钩子来设置调用者ID的东西,只要调用Broker方法就会运行。
Workers调用Broker函数的顺序以及Worker函数不可确定的顺序以及Workers想要与单个代理交互的顺序是完全随机的。
- &GT;因此,对Worker-Broker接口的任何调用都需要某种标识符。
在Python中是否有一种优雅的方式如何在没有通过任何函数调用传递ID参数的情况下,对象如何向另一个对象标识自己?
答案 0 :(得分:0)
您可以为Worker
个对象提供使用Broker
s调用相应id
方法的方法
class Worker
def __init__(self, broker, id):
self.broker = broker
self.id = id
def closeAllPositions(self):
return self.broker.closeAllPositions(self.id)
然后,您只需调用self.broker.closeAllPositions("id")
self.closeAllPositions()