gpt4 book ai didi

python-3.x - 为什么模拟的类型与模拟不匹配?

转载 作者:行者123 更新时间:2023-12-01 01:40:55 24 4
gpt4 key购买 nike

我的代码:

from datetime import datetime
from unittest.mock import Mock

a = datetime.now()
print(id(type(a)))
print(id(datetime))

b = Mock()
print(id(Mock))
print(id(type(b)))

输出:

$ python3 foo.py
4477748792
4477748792
140351771879768
140351771828664

为什么 type(a)datetime 一样?但是 type(b)Mock 不是吗?

最佳答案

如果你看到它有模拟类

class Mock(CallableMixin, NonCallableMock):

现在,如果您探索 NonCallableMock

class NonCallableMock(Base):
"""A non-callable version of `Mock`"""

def __new__(cls, *args, **kw):
# every instance has its own class
# so we can create magic methods on the
# class without stomping on other mocks
new = type(cls.__name__, (cls,), {'__doc__': cls.__doc__})
instance = object.__new__(new)
return instance

它清楚地提到在运行时使用新类创建一个新实例,因此一个 Mock 不会干扰其他。这就是您看到 id 不同的原因,因为对象的实际类是在运行时生成的

关于python-3.x - 为什么模拟的类型与模拟不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57512855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com