python中的元数据

时间:2014-09-10 15:01:13

标签: python clojure metadata

我注意到在某些语言中,例如,您可以将元数据分配给对象。

在Python中,你也可以做这样的事情。

class meta_dict(dict):pass
a={'name': "Bill", 'age':35}
meta_a = meta_dict(a)
meta_a.secret_meta_data='42'
meta_a==a
True
secret_meta_data_dict=meta_a.__dict__
original_dict=dict(meta_a)

我想知道当你需要以特定形式获得数据但是希望其他数据能够优雅地遵循时,这是否是一个合理的模式。

1 个答案:

答案 0 :(得分:0)

...reasonable pattern to follow...没有评论,但这是使用__metaclass__

执行此操作的另一种方法
>>> class MetaFoo(type):
    def __new__(mcs, name, bases, dict):
        dict['foo'] = 'super secret foo'
        return type.__new__(mcs, name, bases, dict)


>>> class Wye(list):
    __metaclass__ = MetaFoo


>>> class Zee(dict):
    __metaclass__ = MetaFoo


>>> y = Wye()
>>> y.append(1)
>>> y.append(2)
>>> y
[1, 2]
>>> y.foo
'super secret foo'
>>> z = Zee({1:2, 3:4})
>>> z[1]
2
>>> z.items()
[(1, 2), (3, 4)]
>>> z.foo
'super secret foo'
>>>