在Python中是否有可能创建匿名对象?

2024-04-19 14:10:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调试一些Python,这些Python将对象列表作为输入,每个对象都有一些属性。

我想硬编码一些测试值——比如说,一个由四个对象组成的列表,它们的“foo”属性设置为某个数字。

有比这更简洁的方法吗?

x1.foo = 1
x2.foo = 2
x3.foo = 3
x4.foo = 4
myfunc([x1, x2, x3, x4])

理想情况下,我只想说一些类似的话:

myfunc([<foo=1>, <foo=2>, <foo=3>, <foo=4>])

(显然,这是由语法组成的。但有没有类似的东西真的有用呢?)

注意:这将永远不会签入。只是一些一次性的调试代码。所以不要担心可读性或可维护性。


Tags: 对象方法编码列表属性foo语法情况
3条回答

我发现了这个:http://www.hydrogen18.com/blog/python-anonymous-objects.html,在我有限的测试中,它似乎起作用:

>>> obj = type('',(object,),{"foo": 1})()
>>> obj.foo
1

我喜欢特提斯的解决方案,但它不必要地复杂。

这里有一个更简单的方法:

>>> class MicroMock(object):
...     def __init__(self, **kwargs):
...         self.__dict__.update(kwargs)
...
>>> def print_foo(x):
...     print x.foo
...
>>> print_foo(MicroMock(foo=3))
3

看看这个:


class MiniMock(object):
    def __new__(cls, **attrs):
        result = object.__new__(cls)
        result.__dict__ = attrs
        return result

def print_foo(x):
    print x.foo

print_foo(MiniMock(foo=3))

相关问题 更多 >