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

我可以向Python添加实例方法吗;模拟;对象

我可以向Python添加实例方法吗;模拟;对象,python,python-mock,Python,Python Mock,我想创建一个mock.mock()对象,然后添加一个名为session的方法,该方法的作用类似于一个实例方法,它被传递给mock对象一个self引用,允许该方法向mock对象添加状态。这是可能的(无需手动使用types.MethodType,例如使用mock的内置API),还是我应该找到解决方法 注意,我发现,这是Ruby的,似乎涵盖了类似的内容,如果不是相同的话。不幸的是,我对Ruby一点也不了解。如果您想增强mock.mock类的功能,只需子类mock并添加您自己的方法即可 class My

我想创建一个
mock.mock()
对象,然后添加一个名为
session
的方法,该方法的作用类似于一个实例方法,它被传递给mock对象一个
self
引用,允许该方法向mock对象添加状态。这是可能的(无需手动使用
types.MethodType
,例如使用mock的内置API),还是我应该找到解决方法


注意,我发现,这是Ruby的,似乎涵盖了类似的内容,如果不是相同的话。不幸的是,我对Ruby一点也不了解。

如果您想增强
mock.mock
类的功能,只需子类
mock
并添加您自己的方法即可

class MyMock(Mock):
    def session(self):
        # Save session data here?
mock解释说,当创建一个新的mock时,它将与父对象的类型相同。这意味着
会话
功能也可用于模拟期间创建的任何其他模拟

这不包括需要将
会话
函数动态附加到现有模拟对象的情况

mock_answer = Mock()

def session():
    mock_answer.b = 1

mock_answer.session = session
mock_answer.session()
print(mock_answer.b)  # 1

实际上,你不需要
self

谢谢,这实际上很好用。虽然模仿父部分的子类在我的例子中没有什么用处,但它不会伤害任何东西。但是如果你需要使用self,你可以使用partial:
from functools import partial
,然后
mock\u answer.session=partial(session,mock\u answer)