多对一关系的Python对象标识
我正在处理一个项目,遇到一个问题,一个类的实例被传递给多个workers对象多对一关系的Python对象标识,python,Python,我正在处理一个项目,遇到一个问题,一个类的实例被传递给多个workers对象 broker = Broker(...) worker1 = Worker(broker, "001") worker2 = Worker(broker, "002") worker3 = Worker(broker, "003") 所有这些工作者现在都在从作为参数传递的代理对象调用函数。由于工作人员都在管理由ID标识的不同代理帐户,因此需要在每次函数调用时将ID参数(“001”、“002”、“003”)从工作人员
broker = Broker(...)
worker1 = Worker(broker, "001")
worker2 = Worker(broker, "002")
worker3 = Worker(broker, "003")
所有这些工作者现在都在从作为参数传递的代理对象调用函数。由于工作人员都在管理由ID标识的不同代理帐户,因此需要在每次函数调用时将ID
参数(“001”、“002”、“003”)从工作人员传递给代理,以便他们能够识别自己,并且代理知道他必须向哪个帐户发送指令
解决内部算法逻辑问题的行动可能是关闭工人1的所有位置:
worker1.closeAllPositions()
Worker类的功能实现是通过将指令传递给Broker类的方式完成的。但由于代理确实需要知道当前调用它的工作人员的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)
现在,所有代理接口都配备了id
参数,因此从工作者到代理的任何函数调用都用帐户标识。但是,由于代理函数具有子依赖关系(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
....
类代理:
定义初始化(自…):
...
def getSummary(self,id):
self.setCallerID(id)您可以给您的Worker
对象方法,这些方法使用id
s调用适当的Broker
方法
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()
,而是传递worker对象本身?@AndrasDeak您的意思是,不必将代理传递给worker,而是将所有worker传递给代理?我的意思是在从worker调用代理方法时传递self
,所以经纪人知道是哪个工人叫它的。也许我误解了你的问题。