第十九章 - 动态属性和特性
动态属性和特性
在Python中数据的属性和处理数据的方法统称为 属性(attribute), 其实方法只是可调用的属性。
动态创建属性是一种元编程,框架的作者经常这么做。
19.1 使用动态属性转换数据
示例19-1
from collections import abc class FrozenJson: """ 一个只读接口,使用属性表示法访问JSON类对象 """ def __init__(self, mapping): self.__data = dict(mapping) def __getattr__(self, item): if hasattr(self.__data, item): return getattr(self.__data, item) else: return FrozenJson.build(self.__data[item]) @classmethod def build(cls, obj): if isinstance(obj, abc.Mapping): return cls(obj) elif isinstance(obj, abc.MutableSequence): return [cls.build(item) for item in obj] else: return obj king = {"aa": {"bb": "cc"}} feed = FrozenJson(king) print(feed.aa.bb) >>>>
111
for k, v in feed.aa.items(): print(k, v)
>>>>
bb cc