Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多对一关系的Python对象标识_Python - Fatal编程技术网

多对一关系的Python对象标识

多对一关系的Python对象标识,python,Python,我正在处理一个项目,遇到一个问题,一个类的实例被传递给多个workers对象 broker = Broker(...) worker1 = Worker(broker, "001") worker2 = Worker(broker, "002") worker3 = Worker(broker, "003") 所有这些工作者现在都在从作为参数传递的代理对象调用函数。由于工作人员都在管理由ID标识的不同代理帐户,因此需要在每次函数调用时将ID参数(“001”、“002”、“003”)从工作人员

我正在处理一个项目,遇到一个问题,一个类的实例被传递给多个workers对象

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
,所以经纪人知道是哪个工人叫它的。也许我误解了你的问题。