这里实际发生的是当你实际导入模块时,fn()已经执行了.因此,在您已经评估了存储在类属性中的方法之后,模拟就会出现.

因此,当您尝试模拟方法时,您尝试进行的测试为时已晚.

如果只是在方法中添加print语句,甚至可以看到这种情况:

def fn():

print("I have run")

return "asdf"

在您的测试模块中,当您导入并且只是在没有运行测试的情况下运行时,您将看到我已经运行将出现在您的控制台输出中,而无需从模块中明确地运行任何内容.

所以,你可以采取两种方法.您可以使用PropertyMock将类属性模拟为您希望存储的内容,如下所示:

@mock.patch('a.C.cls_var',new_callable=PropertyMock)

def test_mock_fn(self,mocked_p):

mocked_p.return_value = '1234'

self.assertEqual('1234',a.C.cls_var)

现在,你必须要知道,通过这样做,你仍然在运行fn,但是通过这种嘲弄,你现在在cls_var中使用你设置的PropertyMock持有’1234′.

以下建议(可能不太理想,因为它需要进行设计更改)将需要修改您使用类属性的原因.因为如果您实际上将该类属性设置为实例属性,那么当您创建C实例时,您的方法将执行,此时它将使用您的模拟.

所以,你的班级看起来像:

class C:

def __init__(self):

self.var = fn()

你的测试看起来像:

@mock.patch('a.fn',return_value='1234')

def test_mock_fn(self,mocked_p):

self.assertEqual('1234',a.C().var)

python类属性初始化_Python:如何模拟类属性初始化函数相关推荐

  1. python定义一个类和子类_Python面向对象class类属性及子类用法分析

    本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...

  2. python3对象初始化_Python 面向对象概念 类和对象 对象初始化__init__ 绑定与非绑定...

    面向对象 (Object Oriented Programming,简称OOP) 1.什么是面向对象:面向对象编程是一种思想,它指导程序员如何编写出更好的程序.它的核心是对象,此时程序员从操作者变成了 ...

  3. python中类的用法_Python中的类和方法使用举例

    成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...

  4. python元类的使用_python中元类用法实例

    本文实例讲述了python中元类用法,分享给大家供大家参考.具体方法分析如下: 1.元类(metaclass)是用来创建类的类 2.type(object):返回一个对象的类型,与object.__c ...

  5. python的类和实例_Python 面向对象编程——类和实例

    1面向对象编程 面向对象编程: 面向对象编程--Object OrientedProgramming OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程 ...

  6. python 常数怎么表达_Python的常数类

    我在看这个问题的答案:是否可以在枚举内定义类常量? 最让我感兴趣的是伊桑·弗曼的回答中不断出现的问题. class Constant: def __init__(self, value): self. ...

  7. python实例变量初始化_Python – 应该在__init__中初始化所有成员变量

    也许这更像是一个样式问题,而不是技术问题,但我有一个带有几个成员变量的python类,我想让它工作,以便在用户首次创建类的实例时初始化一些成员变量(即在__init__函数中)我希望从稍后将调用的成员 ...

  8. python引用类 魔法方法_Python 学习笔记 -- 类的魔法方法

    常用魔法方法 含义 __new__(cls[,...]) 1.__new__在对象被实例化时调用 2.第一个参数是类本身,其他参数传入__init__中 3.__new__如果没有返回值,则不会调用_ ...

  9. python中类和对象_Python里的类和对象简介

    ---恢复内容开始--- Python里的类 对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模具 ...

  10. python中文件分类_Python中的类是否在不同的文件中?

    在Python中,一个文件称为 module.一个模块可以由多个类或函数组成. 由于Python不仅仅是一种OO语言,所以没有规则说明,一个文件只能包含一个类. 一个文件(模块)应该包含属于一起的类/ ...

最新文章

  1. ACM第一名:基于轨迹感知多模态特征的视频关系检测
  2. 51Nod-1082 与7无关的数【进制+打表】
  3. android 地图相册,时光地图相册
  4. 约瑟夫环算法c语言,约瑟夫环的c语言实现(代码已实现)
  5. C++ STL map的使用
  6. Android(Java):jni源代码
  7. 防止a标签跳转的几种方法
  8. 对于python命令行,你应该这么做才专业
  9. 关于android系统集成其他传感器
  10. iOS-属性字符串添加下划线、删除线
  11. Spring框架学习-Spring和IOC概述
  12. 《C语言及程序设计》实践参考——太乐了
  13. 漏洞扫描与云服务器的安全防护
  14. 【转】和菜鸟一起学linux之DBUS基础学习记录
  15. 软考之程序语言与语言处理程序总结
  16. Mysql数据库存储内存调整与优化
  17. Greensock JavaScript动画教程
  18. adjoint-io bulletpoofs 性能测试结果
  19. 日常Bug:0xC0000135
  20. 配置 sysctl.conf 系统参数详解

热门文章

  1. C# GDI+ 绘图
  2. C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)
  3. Android—设计模式原则及常见的设计模式
  4. 开发基础之使用git把项目提交到github托管
  5. sharepoint页面嵌入_在SharePoint 2010页面中嵌入SWF文件
  6. 关于Google插件Postman的使用方法
  7. html字体代码大全_Vba群发邮件及HTML设置字体格式的代码
  8. 西部数据硬盘支持linux,西部数据开发新的Linux文件系统“Zonefs” 支持在分区块设备上运行...
  9. 推流地址 java_Java实现腾讯云直播生成推流地址和播放地址
  10. Oracle一定有sqlplus吗,oracle sqlplus执行sql文件