python中有“标准”基本类吗?

时间:2012-03-16 10:25:19

标签: python class attributes

我正在寻找一种方法来创建一个基本的python“对象”,我可以在外部为其分配属性 目前我的做法如下:

我用

定义一个空类
class C(object):
    pass

然后我实例化一个对象并分配如下属性:

c = C()
c.attr = 2

来我的问题

有没有办法实例化一个空的类对象,然后我可以在不定义class C的情况下分配如上所示的属性?

是否还有其他更好的方法来实现我的目标?

3 个答案:

答案 0 :(得分:6)

看起来您正在寻找一个没有方法的灵活容器,并且可以使用任意名称的属性。那是dict

d = dict()
d['myattr'] = 42

如果您更喜欢使用类(c.myattr = 42)获得的属性语法,那么请根据问题中的代码使用类。

答案 1 :(得分:4)

  

有没有办法实例化一个空类对象,然后我可以在不定义类C的情况下分配如上所示的属性?

是:

>>> C = type("C", (object,), {})
>>> c = C()
>>> c.attr = 2

但正如您所看到的,它并没有太大的改进,最终结果是相同的 - 它只是另一种创建相同类C的方式。

<强>附录:

你可以通过&#34;隐藏&#34;它在一个函数中:

def attr_holder(cls=type("C", (object,), {})):
    return cls()

c = attr_holder()
c.attr = 2

虽然这只是重新发明轮子 - 用

替换两行功能
class attr_holder(object):
    pass

并且它的工作方式完全一致,我们已经完整了。所以:跟David或Reorx建议的那样。

答案 2 :(得分:2)

我很久以前就遇到过同样的问题,然后在我的很多项目中创建这个类:

class DotDict(dict):
    """
    retrieve value of dict in dot style
    """
    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError('has no attribute %s' % key)

    def __setattr__(self, key, value):
        self[key] = value

    def __delattr__(self, key):
        try:
            del self[key]
        except KeyError:
            raise AttributeError(key)

    def __str__(self):
        return '<DotDict %s >' % self.__to_dict()

    def __to_dict(self):
        return dict(self)

当我想要一个对象存储数据或想要从dict中轻松检索值时,我总是使用这个类。

此外,它可以帮助我序列化我在对象中设置的属性,并在需要时反向获取原始字典。

所以我认为在许多情况下这可能是一个很好的解决方案,尽管其他技巧看起来很简单, 他们不是很有帮助。