如何使用所需字段创建“空”对象

时间:2014-05-09 12:07:05

标签: python object

出于测试目的,我需要创建类似于具有某些特定字段的空对象。让我通过例子澄清:

目前有一个结构:

var = {
    'blas': {
        'bla':       0.250,
        'bla1':        0.300,
        'bla2': 6,
        ...
    },
    'somth1': self.smth1,
    'something': [
        { 'h1': 66.00 },
        { 'h2': 47.00 },
        { 'h3': 85.00 },
        { 'h4': 32.00 },
        { 'h5': 34.00 }
    ],
    'this_has_to_be_object'.field: 1
}

我想要的是'this_has_to_be_object'是一个实际的对象,我可以添加一些字段和设置值。此类行为的目的是测试另一个使用'this_has_to_be_object'.field操作的函数。

4 个答案:

答案 0 :(得分:1)

class TestData(object):
    def __init__(self, **dict):
        self.__dict__.update(dict)

var = {
    'blas': {
        'bla':       0.250,
        'bla1':        0.300,
        'bla2': 6,
    },
    'somth1': 2,
    'something': [
        { 'h1': 66.00 },
        { 'h2': 47.00 },
        { 'h3': 85.00 },
        { 'h4': 32.00 },
        { 'h5': 34.00 }
    ],
    'this_has_to_be_object': TestData(field=1)
}

所以:

>>> var['this_has_to_be_object'].field
1

答案 1 :(得分:1)

Namedtuples正在进行中,如果它们不必变得可变:

from collections import namedtuple

MyTupleType = namedtuple('MyTupleType', ['field'])

yourobject = MyTupleType(field=3)

print(yourobject.field)  # prints 3

如果要进行测试,那么使用Mock库也很方便(参见http://www.voidspace.org.uk/python/mock/; unittest.mock也是自Python 3.3以来标准库的一部分。)

yourobject = MagicMock()
yourobject.field = 3

请注意,yourobject现在有您尝试访问的任何字段或方法,它们的值都是另一个MagicMock实例。它是一个非常强大的单元测试工具。

最后你可以创建一个无聊的虚拟类:

class Dummy(object):
    pass

yourobject = Dummy()
yourobject.field = 3

答案 2 :(得分:1)

var = {
'blas': {
    'bla':       0.250,
    'bla1':        0.300,
    'bla2': 6,
    ...
},
'somth1': self.smth1,
'something': [
    { 'h1': 66.00 },
    { 'h2': 47.00 },
    { 'h3': 85.00 },
    { 'h4': 32.00 },
    { 'h5': 34.00 }
],
'this_has_to_be_object':{'field': '1'}

}

这已经是一个对象,如果你说you want to add some field inside你可以像

那样做
...this_has_to_be_object.newField = 3; 

这不是你想要的吗?

答案 3 :(得分:1)

为什么不使用默认字典 here.e.g。

var  = defaultdict(int)

var.update({
    'blas': {
        'bla':       0.250,
        'bla1':        0.300,
        'bla2': 6,
        ...
    },
    'somth1': self.smth1,
    'something': [
        { 'h1': 66.00 },
        { 'h2': 47.00 },
        { 'h3': 85.00 },
        { 'h4': 32.00 },
        { 'h5': 34.00 }
    ],
    'this_has_to_be_object'.field: 1
}
)

现在var ['anything']总是以0返回。

我想这是测试所需的功能,对吗?