第十九章 - 动态属性和特性

动态属性和特性

在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

 

posted @ 2017-07-28 15:38  Vincen_shen  阅读(191)  评论(0)    收藏  举报