Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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_Object - Fatal编程技术网

在python中伪造对象

在python中伪造对象,python,object,Python,Object,我有一个python文件,它包含一个更大的程序的一部分,这个文件用来生成一些相同的数据,然而,当我使用这个程序来获取数据时,它太大了,太旧了,没有文档记录,没有人知道它是如何工作的 我需要处理这些文件生成的数据,是否有方法动态模拟此调用的模块,即,我提供我感兴趣的实际方法,然后为任何未被重写的方法调用提供假响应 我曾试图通过重写uuu getattrib_uuu方法来实现这一点,但失败得很惨(我不再有可用的源代码,因为它被错误地删除了)仅仅添加调用的方法不是更容易吗 但是,是的,你可以用图书馆来

我有一个python文件,它包含一个更大的程序的一部分,这个文件用来生成一些相同的数据,然而,当我使用这个程序来获取数据时,它太大了,太旧了,没有文档记录,没有人知道它是如何工作的

我需要处理这些文件生成的数据,是否有方法动态模拟此调用的模块,即,我提供我感兴趣的实际方法,然后为任何未被重写的方法调用提供假响应


我曾试图通过重写uuu getattrib_uuu方法来实现这一点,但失败得很惨(我不再有可用的源代码,因为它被错误地删除了)

仅仅添加调用的方法不是更容易吗


但是,是的,你可以用图书馆来伪装它

您不能使用
\uuuuu getattribute\uuuu
伪造函数,如
\uuuu add\uuuuuuu

您可以找到需要在类端实现的所有方法,例如
\uuuuu add\uuuu

我向他们提出了一个建议。 它甚至可以模拟整数

一旦您覆盖了
。\uuuu getattribute\uuuu
可能会派上用场

class X(object):
    def __getattribute__(self, name): ...

    def use_this_getattribute(self):
        ... # uses getattribute from above

    @objectGetattributeFunction
    def use_original_getattribute(self):
        ...

不,遗憾的是,它与方法所调用的不同,而相同的文件之间略有不同。我将查看模拟库thanks@Bickerx2我不确定这会有什么不同,他们略有不同。模拟库可以伪造响应,但很可能您必须告诉它伪造什么,以便调用方无论如何都不会失败。我认为模拟库可能确实是解决方案。否则,我将不得不对文件进行一些严重的更改,然后对其进行正则化(我并不期待这样做)。有趣的方法,但考虑到我将隐藏的实际代码的工作复杂性(即许多未知的副作用),我想我现在将使用Mock,但是,如果它不起作用,我可能会再看一眼重写_getattribute_