首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么类型( mock.MagicMock ()) == mock.MagicMock返回False?

为什么类型( mock.MagicMock ()) == mock.MagicMock返回False?
EN

Stack Overflow用户
提问于 2014-10-11 22:32:15
回答 1查看 317关注 0票数 4

在Python3.4:

代码语言:javascript
复制
>>> import mock.MagicMock
>>> type(mock.MagicMock()) == mock.MagicMock
False # Huh, why is that?
>>> isinstance(mock.MagicMock(), mock.MagicMock)
True

当我将其简化为AB类时,type(B()) == B返回True

代码语言:javascript
复制
>>> class A: pass
>>> class B: pass
>>> class C(A, B): pass
>>> type(B()) == B    
True # Of course I would say. 

为什么返回type(mock.MagicMock()) == mock.MagicMock False?我知道Python中的type()type()不理解isinstance所做的子类化。但我看不出这有什么区别。

来源 of mock.MagicMock.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-12 02:01:18

更多的实验给出了答案。

代码语言:javascript
复制
>>> from unittest.mock import MagicMock as mm
>>> mm1 = mm()
>>> mm2 = mm()
>>> type(mm1)
<class 'unittest.mock.MagicMock'>
>>> type(mm2)
<class 'unittest.mock.MagicMock'>
>>> type(mm1) == type(mm2)
False
>>> id(type(mm1))
53511896
>>> id(type(mm2))
53510984
>>> type(mm1) is mm1.__class__
True
>>> mm
<class 'unittest.mock.MagicMock'>
>>> id(mm)
53502776

结论: MagicMock的每个实例都有一个类似于MagicMock的“类”,但不是。创建此类实例的是什么?MagicMock子类模拟,其中子类为NonCallableMock,该子类具有此新的方法。

代码语言:javascript
复制
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

new = ...语句创建具有相同名称和docstring的cls参数的子类。下一行创建此子类的单个实例。所以Mocks遵循修改后的等式,而不是type(mm()) is mm

代码语言:javascript
复制
>>> mm.__bases__
(<class 'unittest.mock.MagicMixin'>, <class 'unittest.mock.Mock'>)
>>> type(mm1).__bases__
(<class 'unittest.mock.MagicMock'>,)
>>> type(mm1).__bases__[0] is mm
True
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26319942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档