在Python中创建真正的空类型

2024-04-24 03:26:18 发布

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

通常,我希望在Python中创建完全空的对象。基本上,我想知道键是属性的dict。在Python 2.x中,我可以创建一个老式类型,如下所示:

class Empty: pass

这将创建一个只有两个属性(__doc____module__)的类型。在python3.x中,所有东西都是一个新样式的类,所以我得到了18个属性。在

在我目前的情况下,我有一个类,它允许您指定需要在单元测试中修补的类型。当应用补丁时,我正在创建一个类型,其中包含每个模拟类型的名称的属性。这几乎就是我当前的实现所做的:

^{pr2}$

我担心的是,如果有人嘲笑私有成员,他们可能会与EmptyType对象中的名称发生命名冲突。这就是为什么我希望在EmptyType中保留尽可能少的属性。而且说mocks.find_users比说mocks["find_users"]容易得多,尤其是当我知道名称必须是有效标识符时。在

现在,我提供了给mocks不同名称的功能,而不是默认名称。不过,最好能在第一时间避免混淆错误。在JavaScript中创建几乎几乎空类型非常容易,我希望Python中也有类似的东西,因为我一直在寻找它们的良好用途。在


Tags: 对象名称类型doc属性passfind老式
1条回答
网友
1楼 · 发布于 2024-04-24 03:26:18

创建您自己的自定义容器怎么样?在

class Empty(object):

    def __init__(self, **kwargs):
        object.__setattr__(self, '_obj', kwargs)

    def __getattribute__(self, name):
        obj = object.__getattribute__(self, '_obj')
        try:
            return obj[name]
        except KeyError:
            cls_name = object.__getattribute__(self, '__class__').__name__
            raise AttributeError(
                "'%(cls_name)s' object has no attribute '%(name)s'" % locals())

    def __setattr__(self, name, val):
        obj = object.__getattribute__(self, '_obj')
        obj[name] = val

    def __getitem__(self, key):
        return getattr(self, key)

    def __setitem__(self, key, val):
        return setattr(self, key, val)

用法:

^{pr2}$

它将把所有内容存储在_obj字典下,这样您就可以获得一个与实际实例属性不冲突的干净空间。在

相关问题 更多 >