在运行时设置点属性?
我正在模拟一些数据,需要通过点语法来访问属性,这样可以让我的运行代码更整洁。但是当我尝试下面的代码时,出现了错误:
mockdata = object()
mockdata.name = "Hello"
object_under_test.evaluate(mockdata)
我该如何写Python代码,让我可以像这样设置属性,而不需要创建一个类呢?
4 个回答
1
没错,正如Raymond Hettinger所说,你只需要创建一个类,这个类可以用来保存属性。不过,通常在进行模拟(Mocking)时,你可能需要设置一些返回值,以便验证某些方法的正确性。你可以像平常一样为任何类设置这些返回值。如果你想要模拟某个现有类中的方法,有一些库可以帮助你做到这一点,其中一个叫做Mock。
3
如果你不想“创建一个类”(我这里指的是用 class
这个关键词来定义一个类),你可以这样做:
mockdata = type("Mockdata", (object,), {})()
这样做还是会创建一个类(其实是 object
的一个子类),不过在使用之前并没有给它起个名字。我想你可能会觉得这样更好,因为它不会让你的命名空间变得杂乱。
7
创建一个可以接受属性赋值的对象变体:
>>> class Object(object):
pass
>>> mockdata = Object()
>>> mockdata.someattr = somevalue