python类中、类可以多个继承_Python类继承多处理:模拟一个类对象

我写了一个继承多处理过程()类。在初始化过程中,我设置了一些参数,其中一个是另一个类,它会写入硬盘上的某个文件。为了进行单元测试,我想模拟这个类实例,以避免实际写入某些文件。以下是一些最小的例子:import mock

import time

import multiprocessing as mp

import numpy as np

class MyProcess(mp.Process):

def __init__(self):

super(MyProcess, self).__init__()

# the original code would create some instance of a file manipulation

# class here:

self._some_class = np.zeros(100)

def run(self):

# the following line would actually write to some file in the original

# code:

self._some_class.sum()

for ii in range(10):

print(str(ii))

time.sleep(.01)

if __name__ == '__main__':

proc = MyProcess()

# proc._some_class = mock.Mock()

proc.start()

proc.join()

上面的代码应该按原样运行。但是,如果我试图模拟类在类MyProcess中的某个类(取消对main函数中的行的注释),我会得到错误。有趣的是,如果我试图用一个函数初始化self.\u some\u class(例如,将上面代码中的第13行替换为*self.\u some_class=lambda x:x/2*)。因此,我的猜测是,当一个新进程产生时,复制MyProcess中的对象有一些问题。这就提出了两个问题:有人能解释一下为什么不能用函数初始化类对象吗?在

如何模拟MyProcess的类对象之一?在

我真的很感激你的帮助。。。在

编辑1(有关错误消息的详细信息):

如果我取消了main函数中的行的注释,就会得到一堆错误,我认为下面应该是相关的错误:

在pickle.pickling错误:无法pickle:它与模仿。模仿在

编辑2(找到一些相关信息):

我在google代码中发现了以下issue,这似乎与我的问题有关。实际上,将main函数中的mock更改为以下内容可使代码可执行:

^{pr2}$

但是,我对测试感兴趣的是以下调用:proc.\u some_class.some\u方法尽管事实一直被称为错误的方法。我想这和我上面提到的解决方法有关。在

编辑3(基于jb建议的解决方法):

可以通过直接调用run方法来解决这个问题。以下代码包含main函数,并演示如何使用模拟测试函数:if __name__ == '__main__':

proc = MyProcess()

proc._some_class = mock.MagicMock()

proc.run()

print(proc._some_class.sum.called)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值