关于补丁属性的文档

问题描述 投票:0回答:1

我试图从一个类中修补一个属性,在 SO 中进行了大量搜索后,我明白只有类属性“可以”被修补。如果我想修补对象属性,我必须“创建”它们(在修补程序中使用

create=True
选项)。

例子:

class A:

    def __init__(self):
        self._a = 5

class B(A):

    def ok(self):
        a = A()
        print(a._a)

def test(mocker):
    mocker.patch("test_scratch.A._a", return_value=3)

这个例子使用了pytest-mock。

使用

pytest
运行此命令,在名为
test_scratch.py
的文件中会导致以下错误:

AttributeError: 没有属性 '_a'

我明白这是为什么,但是在阅读了文档之后,我无法在任何地方找到这个解释。这让我更想知道我错过了多少(即,我飞越了多少相关细节)。

那么,这种行为记录在哪里?

python python-unittest
1个回答
0
投票

我会说它在第一段中是明确的文件。

在函数体或 with 语句中,目标被新对象修补。

从这句话我明白

patch
将在一个已经存在的引用中设置一个对象。 您正在尝试将特定值放入不存在的变量中。

© www.soinside.com 2019 - 2024. All rights reserved.