在运行时设置点属性?

2 投票
4 回答
660 浏览
提问于 2025-04-17 10:23

我正在模拟一些数据,需要通过点语法来访问属性,这样可以让我的运行代码更整洁。但是当我尝试下面的代码时,出现了错误:

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

撰写回答